From bf5a4e534a9d4db7109f7c6120c13e68022eb25b Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Sat, 14 Sep 2024 06:04:32 +0000 Subject: [PATCH] build based on 381f43c --- dev/.documenter-siteinfo.json | 2 +- dev/API/index.html | 130 ++++++++++---------- dev/ECC_API/index.html | 10 +- dev/ECC_evaluating/42065b1a.png | Bin 0 -> 56075 bytes dev/ECC_evaluating/505c611f.png | Bin 0 -> 42811 bytes dev/ECC_evaluating/a18880eb.png | Bin 43125 -> 0 bytes dev/ECC_evaluating/c729faba.png | Bin 54919 -> 0 bytes dev/ECC_evaluating/index.html | 4 +- dev/allops/index.html | 2 +- dev/canonicalization/23f10a97.png | Bin 9772 -> 0 bytes dev/canonicalization/37ecaa84.png | Bin 0 -> 9952 bytes dev/canonicalization/59f18518.png | Bin 9933 -> 0 bytes dev/canonicalization/71416456.png | Bin 0 -> 9474 bytes dev/canonicalization/928a7be8.png | Bin 9619 -> 0 bytes dev/canonicalization/b50f1a04.png | Bin 0 -> 9644 bytes dev/canonicalization/b99338ee.png | Bin 0 -> 9778 bytes dev/canonicalization/ea199665.png | Bin 9447 -> 0 bytes dev/canonicalization/index.html | 8 +- dev/commonstates/index.html | 2 +- dev/datastructures/index.html | 2 +- dev/ecc_example_sim/index.html | 8 +- dev/graphs/index.html | 2 +- dev/index.html | 2 +- dev/mixed/index.html | 2 +- dev/noise/index.html | 2 +- dev/noisycircuits/index.html | 2 +- dev/noisycircuits_API/index.html | 2 +- dev/noisycircuits_mc/index.html | 4 +- dev/noisycircuits_ops/index.html | 2 +- dev/noisycircuits_perturb/index.html | 4 +- dev/plotting/{56551129.svg => 4c4a57c7.svg} | 12 +- dev/plotting/{61165897.svg => 82806d2b.svg} | 12 +- dev/plotting/{d2e5c1f3.svg => c58e306e.svg} | 12 +- dev/plotting/{55a3e0a7.svg => e518fb96.svg} | 12 +- dev/plotting/{2d1114ef.svg => eaa7818f.svg} | 12 +- dev/plotting/index.html | 12 +- dev/references/index.html | 2 +- dev/stab-algebra-manual/index.html | 2 +- dev/tutandpub/index.html | 2 +- 39 files changed, 134 insertions(+), 134 deletions(-) create mode 100644 dev/ECC_evaluating/42065b1a.png create mode 100644 dev/ECC_evaluating/505c611f.png delete mode 100644 dev/ECC_evaluating/a18880eb.png delete mode 100644 dev/ECC_evaluating/c729faba.png delete mode 100644 dev/canonicalization/23f10a97.png create mode 100644 dev/canonicalization/37ecaa84.png delete mode 100644 dev/canonicalization/59f18518.png create mode 100644 dev/canonicalization/71416456.png delete mode 100644 dev/canonicalization/928a7be8.png create mode 100644 dev/canonicalization/b50f1a04.png create mode 100644 dev/canonicalization/b99338ee.png delete mode 100644 dev/canonicalization/ea199665.png rename dev/plotting/{56551129.svg => 4c4a57c7.svg} (98%) rename dev/plotting/{61165897.svg => 82806d2b.svg} (98%) rename dev/plotting/{d2e5c1f3.svg => c58e306e.svg} (98%) rename dev/plotting/{55a3e0a7.svg => e518fb96.svg} (99%) rename dev/plotting/{2d1114ef.svg => eaa7818f.svg} (99%) diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index f1543688f..5c2352cc3 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.10.5","generation_timestamp":"2024-09-14T05:32:09","documenter_version":"1.7.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.10.5","generation_timestamp":"2024-09-14T06:04:25","documenter_version":"1.7.0"}} \ No newline at end of file diff --git a/dev/API/index.html b/dev/API/index.html index bfaffd819..9b7d97aad 100644 --- a/dev/API/index.html +++ b/dev/API/index.html @@ -4,7 +4,7 @@ padding-top: 0 !important; padding-bottom: 0 !important; } -

States

Stabilizer states can be represented with the Stabilizer, Destabilizer, MixedStabilizer, and MixedDestabilizer tableau data structures. You probably want to use MixedDestabilizer which supports the widest set of operations.

Moreover, a MixedDestabilizer can be stored inside a Register together with a set of classical bits in which measurement results can be written.

Lastly, for Pauli frame simulations there is the PauliFrame type, a tableau in which each row represents a different Pauli frame.

There are convenience constructors for common types of states and operators.

Operations

Acting on quantum states can be performed either:

See the full list of operations for a list of implemented operations.

Autogenerated API list

QuantumClifford.QuantumCliffordModule

A module for using the Stabilizer formalism and simulating Clifford circuits.

source
QuantumClifford.continue_statConstant

Returned by applywstatus! if the circuit simulation should continue.

source
QuantumClifford.failure_statConstant

Returned by applywstatus! if the circuit reports a failure.

See also: VerifyOp, BellMeasurement.

source
QuantumClifford.false_success_statConstant

Returned by applywstatus! if the circuit reports a success, but it is a false positive (i.e., there was an undetected error).

See also: VerifyOp, BellMeasurement.

source
QuantumClifford.true_success_statConstant

Returned by applywstatus! if the circuit reports a success and there is no undetected error.

See also: VerifyOp, BellMeasurement.

source
QuantumClifford.AbstractSingleQubitOperatorType

Supertype of all single-qubit symbolic operators.

source
QuantumClifford.AbstractSymbolicOperatorType

Supertype of all symbolic operators. Subtype of AbstractCliffordOperator

source
QuantumClifford.AbstractTwoQubitOperatorType

Supertype of all two-qubit symbolic operators.

source
QuantumClifford.BellMeasurementType

A Bell measurement performing the correlation measurement corresponding to the given pauli projections on the qubits at the selected indices.

source
QuantumClifford.CircuitStatusType

A convenience struct to represent the status of a circuit simulated by mctrajectories

source
QuantumClifford.ClassicalXORType

Applies an XOR gate to classical bits. Currently only implemented for functionality with pauli frames.

source
QuantumClifford.CliffordOperatorType

Clifford Operator specified by the mapping of the basis generators.

julia> tCNOT
+

States

Stabilizer states can be represented with the Stabilizer, Destabilizer, MixedStabilizer, and MixedDestabilizer tableau data structures. You probably want to use MixedDestabilizer which supports the widest set of operations.

Moreover, a MixedDestabilizer can be stored inside a Register together with a set of classical bits in which measurement results can be written.

Lastly, for Pauli frame simulations there is the PauliFrame type, a tableau in which each row represents a different Pauli frame.

There are convenience constructors for common types of states and operators.

Operations

Acting on quantum states can be performed either:

  • In a "linear algebra" language where unitaries, measurements, and other operations have separate interfaces. This is an explicitly deterministic lower-level interface, which provides a great deal of control over how tableaux are manipulated. See the Stabilizer Tableau Algebra Manual as a primer on these approaches.
  • Or in a "circuit" language, where the operators (and measurements and noise) are represented as circuit gates. This is a higher-level interface in which the outcome of an operation can be stochastic. The API for it is centered around the apply! function. Particularly useful for Monte Carlo simulations and Perturbative Expansion Symbolic Results.

See the full list of operations for a list of implemented operations.

Autogenerated API list

QuantumClifford.BellMeasurementType

A Bell measurement performing the correlation measurement corresponding to the given pauli projections on the qubits at the selected indices.

source
QuantumClifford.CliffordOperatorType

Clifford Operator specified by the mapping of the basis generators.

julia> tCNOT
 X₁ ⟼ + XX
 X₂ ⟼ + _X
 Z₁ ⟼ + Z_
@@ -33,12 +33,12 @@
 
 julia> CliffordOperator(d)
 X₁ ⟼ + Z
-Z₁ ⟼ + Y
source
QuantumClifford.DestabilizerType

A tableau representation of a pure stabilizer state. The tableau tracks the destabilizers as well, for efficient projections. On initialization there are no checks that the provided state is indeed pure. This enables the use of this data structure for mixed stabilizer state, but a better choice would be to use MixedDestabilizer.

source
QuantumClifford.MixedDestabilizerType

A tableau representation for mixed stabilizer states that keeps track of the destabilizers in order to provide efficient projection operations.

The rank r of the n-qubit tableau is tracked, either so that it can be used to represent a mixed stabilizer state, or so that it can be used to represent an n-r logical-qubit code over n physical qubits. The "logical" operators are tracked as well.

When the constructor is called on an incomplete Stabilizer it automatically calculates the destabilizers and logical operators, following chapter 4 of (Gottesman, 1997). Under the hood the conversion uses the canonicalize_gott! canonicalization. That canonicalization permutes the columns of the tableau, but we automatically undo the column permutation in the preparation of a MixedDestabilizer so that qubits are not reindexed. The boolean keyword arguments undoperm and reportperm can be used to control this behavior and to report the permutations explicitly.

See also: stabilizerview, destabilizerview, logicalxview, logicalzview

source
QuantumClifford.PauliFrameType
struct PauliFrame{T, S} <: QuantumClifford.AbstractQCState

This is a wrapper around a tableau. This "frame" tableau is not to be viewed as a normal stabilizer tableau, although it does conjugate the same under Clifford operations. Each row in the tableau refers to a single frame. The row represents the Pauli operation by which the frame and the reference differ.

source
QuantumClifford.DestabilizerType

A tableau representation of a pure stabilizer state. The tableau tracks the destabilizers as well, for efficient projections. On initialization there are no checks that the provided state is indeed pure. This enables the use of this data structure for mixed stabilizer state, but a better choice would be to use MixedDestabilizer.

source
QuantumClifford.MixedDestabilizerType

A tableau representation for mixed stabilizer states that keeps track of the destabilizers in order to provide efficient projection operations.

The rank r of the n-qubit tableau is tracked, either so that it can be used to represent a mixed stabilizer state, or so that it can be used to represent an n-r logical-qubit code over n physical qubits. The "logical" operators are tracked as well.

When the constructor is called on an incomplete Stabilizer it automatically calculates the destabilizers and logical operators, following chapter 4 of (Gottesman, 1997). Under the hood the conversion uses the canonicalize_gott! canonicalization. That canonicalization permutes the columns of the tableau, but we automatically undo the column permutation in the preparation of a MixedDestabilizer so that qubits are not reindexed. The boolean keyword arguments undoperm and reportperm can be used to control this behavior and to report the permutations explicitly.

See also: stabilizerview, destabilizerview, logicalxview, logicalzview

source
QuantumClifford.PauliFrameType
struct PauliFrame{T, S} <: QuantumClifford.AbstractQCState

This is a wrapper around a tableau. This "frame" tableau is not to be viewed as a normal stabilizer tableau, although it does conjugate the same under Clifford operations. Each row in the tableau refers to a single frame. The row represents the Pauli operation by which the frame and the reference differ.

source
QuantumClifford.PauliFrameMethod
PauliFrame(
     frames,
     qubits,
     measurements
 ) -> PauliFrame{Stabilizer{QuantumClifford.Tableau{Vector{UInt8}, LinearAlgebra.Adjoint{UInt64, Matrix{UInt64}}}}}
-

Prepare an empty set of Pauli frames with the given number of frames and qubits. Preallocates spaces for measurement number of measurements.

source
QuantumClifford.PauliOperatorType

A multi-qubit Pauli operator ($±\{1,i\}\{I,Z,X,Y\}^{\otimes n}$).

A Pauli can be constructed with the P custom string macro or by building up one through products and tensor products of smaller operators.

julia> pauli3 = P"-iXYZ"
+

Prepare an empty set of Pauli frames with the given number of frames and qubits. Preallocates spaces for measurement number of measurements.

source
QuantumClifford.PauliOperatorType

A multi-qubit Pauli operator ($±\{1,i\}\{I,Z,X,Y\}^{\otimes n}$).

A Pauli can be constructed with the P custom string macro or by building up one through products and tensor products of smaller operators.

julia> pauli3 = P"-iXYZ"
 -iXYZ
 
 julia> pauli4 = 1im * pauli3 ⊗ X
@@ -55,7 +55,7 @@
 (true, false)
 
 julia> p[1] = (true, true); p
-+ YYZ
source
QuantumClifford.RegisterType

A register, representing the state of a computer including both a tableaux and an array of classical bits (e.g. for storing measurement results)

source
QuantumClifford.ResetType

Reset the specified qubits to the given state.

Be careful, this operation implies first tracing out the qubits, which can lead to mixed states if these qubits were entangled with the rest of the system.

See also: sMRZ

source
QuantumClifford.SingleQubitOperatorType

A "symbolic" general single-qubit operator which permits faster multiplication than an operator expressed as an explicit tableau.

julia> op = SingleQubitOperator(2, true, true, true, false, true, true) # Tableau components and phases
++ YYZ
source
QuantumClifford.RegisterType

A register, representing the state of a computer including both a tableaux and an array of classical bits (e.g. for storing measurement results)

source
QuantumClifford.ResetType

Reset the specified qubits to the given state.

Be careful, this operation implies first tracing out the qubits, which can lead to mixed states if these qubits were entangled with the rest of the system.

See also: sMRZ

source
QuantumClifford.SingleQubitOperatorType

A "symbolic" general single-qubit operator which permits faster multiplication than an operator expressed as an explicit tableau.

julia> op = SingleQubitOperator(2, true, true, true, false, true, true) # Tableau components and phases
 SingleQubitOperator on qubit 2
 X₁ ⟼ - Y
 Z₁ ⟼ - X
@@ -76,7 +76,7 @@
 
 julia> CliffordOperator(op, 1, compact=true) # You can also extract just the non-trivial part of the tableau
 X₁ ⟼ - Y
-Z₁ ⟼ - X

See also: sHadamard, sPhase, sId1, sX, sY, sZ, CliffordOperator

Or simply consult subtypes(QuantumClifford.AbstractSingleQubitOperator) and subtypes(QuantumClifford.AbstractTwoQubitOperator) for a full list. You can think of the s prefix as "symbolic" or "sparse".

source
QuantumClifford.SparseGateType

A Clifford gate, applying the given cliff operator to the qubits at the selected indices.

apply!(state, cliff, indices) and apply!(state, SparseGate(cliff, indices)) give the same result.

source
QuantumClifford.StabMixtureType
mutable struct StabMixture{T, F}

Represents mixture ∑ ϕᵢⱼ Pᵢ ρ Pⱼ† where ρ is a pure stabilizer state.

julia> StabMixture(S"-X")
+Z₁ ⟼ - X

See also: sHadamard, sPhase, sId1, sX, sY, sZ, CliffordOperator

Or simply consult subtypes(QuantumClifford.AbstractSingleQubitOperator) and subtypes(QuantumClifford.AbstractTwoQubitOperator) for a full list. You can think of the s prefix as "symbolic" or "sparse".

source
QuantumClifford.SparseGateType

A Clifford gate, applying the given cliff operator to the qubits at the selected indices.

apply!(state, cliff, indices) and apply!(state, SparseGate(cliff, indices)) give the same result.

source
QuantumClifford.StabMixtureType
mutable struct StabMixture{T, F}

Represents mixture ∑ ϕᵢⱼ Pᵢ ρ Pⱼ† where ρ is a pure stabilizer state.

julia> StabMixture(S"-X")
 A mixture ∑ ϕᵢⱼ Pᵢ ρ Pⱼ† where ρ is
 𝒟ℯ𝓈𝓉𝒶𝒷
 + Z
@@ -101,7 +101,7 @@
  0.0+0.353553im | + _ | + Z
  0.0-0.353553im | + Z | + _
  0.853553+0.0im | + _ | + _
- 0.146447+0.0im | + Z | + Z

See also: PauliChannel

source
QuantumClifford.StabilizerType

Stabilizer, i.e. a list of commuting multi-qubit Hermitian Pauli operators.

Instances can be created with the S custom string macro or as direct sum of other stabilizers.

Stabilizers and Destabilizers

In many cases you probably would prefer to use the MixedDestabilizer data structure, as it caries a lot of useful additional information, like tracking rank and destabilizer operators. Stabilizer has mostly a pedagogical value, and it is also used for slightly faster simulation of a particular subset of Clifford operations.

julia> s = S"XXX
+ 0.146447+0.0im | + Z | + Z

See also: PauliChannel

source
QuantumClifford.StabilizerType

Stabilizer, i.e. a list of commuting multi-qubit Hermitian Pauli operators.

Instances can be created with the S custom string macro or as direct sum of other stabilizers.

Stabilizers and Destabilizers

In many cases you probably would prefer to use the MixedDestabilizer data structure, as it caries a lot of useful additional information, like tracking rank and destabilizer operators. Stabilizer has mostly a pedagogical value, and it is also used for slightly faster simulation of a particular subset of Clifford operations.

julia> s = S"XXX
              ZZI
              IZZ"
 + XXX
@@ -134,7 +134,7 @@
 
 julia> s[1,1] = (true, false); s
 + X_
-+ __

There are no automatic checks for correctness (i.e. independence of all rows, commutativity of all rows, hermiticity of all rows). The rank (number of rows) is permitted to be less than the number of qubits (number of columns): canonilization, projection, etc. continue working in that case. To great extent this library uses the Stabilizer data structure simply as a tableau. This might be properly abstracted away in future versions.

See also: PauliOperator, canonicalize!

source
QuantumClifford.UnitaryPauliChannelType

A Pauli channel datastructure, mainly for use with StabMixture.

More convenient to use than PauliChannel when you know your Pauli channel is unitary.

julia> Tgate = UnitaryPauliChannel(
++ __

There are no automatic checks for correctness (i.e. independence of all rows, commutativity of all rows, hermiticity of all rows). The rank (number of rows) is permitted to be less than the number of qubits (number of columns): canonilization, projection, etc. continue working in that case. To great extent this library uses the Stabilizer data structure simply as a tableau. This might be properly abstracted away in future versions.

See also: PauliOperator, canonicalize!

source
QuantumClifford.UnitaryPauliChannelType

A Pauli channel datastructure, mainly for use with StabMixture.

More convenient to use than PauliChannel when you know your Pauli channel is unitary.

julia> Tgate = UnitaryPauliChannel(
            (I, Z),
            ((1+exp(im*π/4))/2, (1-exp(im*π/4))/2)
        )
@@ -149,7 +149,7 @@
  0.853553+0.0im | + _ | + _
  0.0+0.353553im | + _ | + Z
  0.0-0.353553im | + Z | + _
- 0.146447+0.0im | + Z | + Z
source
QuantumClifford.VerifyOpType

A "probe" to verify that the state of the qubits corresponds to a desired good_state, e.g. at the end of the execution of a circuit.

source
QuantumClifford.sMRZType

Measure a qubit in the Z basis and reset to the |0⟩ state.

It does not trace out the qubit!

As described below there is a difference between measuring the qubit (followed by setting it to a given known state) and "tracing out" the qubit. By reset here we mean "measuring and setting to a known state", not "tracing out".

julia> s = MixedDestabilizer(S"XXX ZZI IZZ") # |000⟩+|111⟩
+ 0.146447+0.0im | + Z | + Z
source
QuantumClifford.VerifyOpType

A "probe" to verify that the state of the qubits corresponds to a desired good_state, e.g. at the end of the execution of a circuit.

source
QuantumClifford.sMRZType

Measure a qubit in the Z basis and reset to the |0⟩ state.

It does not trace out the qubit!

As described below there is a difference between measuring the qubit (followed by setting it to a given known state) and "tracing out" the qubit. By reset here we mean "measuring and setting to a known state", not "tracing out".

julia> s = MixedDestabilizer(S"XXX ZZI IZZ") # |000⟩+|111⟩
 𝒟ℯ𝓈𝓉𝒶𝒷
 + Z__
 + _X_
@@ -199,7 +199,7 @@
 𝒮𝓉𝒶𝒷━
 + Z__
 - ZZ_
-- Z_Z

See also: Reset, sMZ

source
QuantumClifford.PauliErrorFunction

A convenient constructor for various types of Pauli errors, that can be used as circuit gates in simulations. Returns more specific types when necessary.

source
QuantumClifford.PauliErrorMethod

"Construct a gate operation that applies a biased Pauli error on all qubits independently, each with probabilities px, py, pz. Note that the probability of any error occurring is px+py+pz. Because of this, PauliError(1, p) is equivalent to PauliError(1,p/3,p/3,p/3). Similarly, if one wanted to exclude Z errors from PauliError(1,p/3,p/3,p/3) while mainting the same rate of X errors, one could write PauliError(1, p*2/3, 0, 0) (in the sense that Y errors can be interpreted as an X and a Z happening at the same time).

source
QuantumClifford.PauliErrorMethod

"Construct a gate operation that applies a biased Pauli error on qubit q with independent probabilities px, py, pz. Note that the probability of any error occurring is px+py+pz. Because of this, PauliError(1, p) is equivalent to PauliError(1,p/3,p/3,p/3). Similarly, if one wanted to exclude Z errors from PauliError(1,p/3,p/3,p/3) while mainting the same rate of X errors, one could write PauliError(1, p*2/3, 0, 0) (in the sense that Y errors can be interpreted as an X and a Z happening at the same time).

source
QuantumClifford.applybranchesFunction

Compute all possible new states after the application of the given operator. Reports the probability of each one of them. Deterministic (as it reports all branches of potentially random processes), part of the Perturbative Expansion interface.

source
QuantumClifford.applynoise!Function

A method modifying a given state by applying the corresponding noise model. It is non-deterministic, part of the Noise interface.

source
QuantumClifford.PauliErrorFunction

A convenient constructor for various types of Pauli errors, that can be used as circuit gates in simulations. Returns more specific types when necessary.

source
QuantumClifford.PauliErrorMethod

"Construct a gate operation that applies a biased Pauli error on all qubits independently, each with probabilities px, py, pz. Note that the probability of any error occurring is px+py+pz. Because of this, PauliError(1, p) is equivalent to PauliError(1,p/3,p/3,p/3). Similarly, if one wanted to exclude Z errors from PauliError(1,p/3,p/3,p/3) while mainting the same rate of X errors, one could write PauliError(1, p*2/3, 0, 0) (in the sense that Y errors can be interpreted as an X and a Z happening at the same time).

source
QuantumClifford.PauliErrorMethod

"Construct a gate operation that applies a biased Pauli error on qubit q with independent probabilities px, py, pz. Note that the probability of any error occurring is px+py+pz. Because of this, PauliError(1, p) is equivalent to PauliError(1,p/3,p/3,p/3). Similarly, if one wanted to exclude Z errors from PauliError(1,p/3,p/3,p/3) while mainting the same rate of X errors, one could write PauliError(1, p*2/3, 0, 0) (in the sense that Y errors can be interpreted as an X and a Z happening at the same time).

source
QuantumClifford.applybranchesFunction

Compute all possible new states after the application of the given operator. Reports the probability of each one of them. Deterministic (as it reports all branches of potentially random processes), part of the Perturbative Expansion interface.

source
QuantumClifford.applynoise!Function

A method modifying a given state by applying the corresponding noise model. It is non-deterministic, part of the Noise interface.

source
QuantumClifford.bellFunction

Prepare one or more Bell pairs (with optional phases).

julia> bell()
 + XX
 + ZZ
 
@@ -217,11 +217,11 @@
 - XX__
 + ZZ__
 - __XX
-- __ZZ
source
QuantumClifford.bigramMethod
bigram(
     state::QuantumClifford.AbstractStabilizer;
     clip
 ) -> Matrix{Int64}
-

Get the bigram of a tableau.

It is the list of endpoints of a tableau in the clipped gauge.

If clip=true (the default) the tableau is converted to the clipped gauge in-place before calculating the bigram. Otherwise, the clip gauge conversion is skipped (for cases where the input is already known to be in the correct gauge).

Introduced in (Nahum et al., 2017), with a more detailed explanation of the algorithm in (Li et al., 2019) and (Gullans et al., 2021).

See also: canonicalize_clip!

source
QuantumClifford.canonicalize!Method
canonicalize!(
+

Get the bigram of a tableau.

It is the list of endpoints of a tableau in the clipped gauge.

If clip=true (the default) the tableau is converted to the clipped gauge in-place before calculating the bigram. Otherwise, the clip gauge conversion is skipped (for cases where the input is already known to be in the correct gauge).

Introduced in (Nahum et al., 2017), with a more detailed explanation of the algorithm in (Li et al., 2019) and (Gullans et al., 2021).

See also: canonicalize_clip!

source
QuantumClifford.canonicalize_clip!Method
canonicalize_clip!(
     state::QuantumClifford.AbstractStabilizer;
     phases
 ) -> QuantumClifford.AbstractStabilizer
@@ -294,32 +294,32 @@
 + _XZX__
 - _ZYX_Z
 - __YZ_X
-- ____Z_

If phases=false is set, the canonicalization does not track the phases in the tableau, leading to a significant speedup.

Introduced in (Nahum et al., 2017), with a more detailed explanation of the algorithm in Appendix A of (Li et al., 2019)

See also: canonicalize!, canonicalize_rref!, canonicalize_gott!.

source
QuantumClifford.canonicalize_gott!Method

Inplace Gottesman canonicalization of a tableau.

This uses different canonical form from canonicalize!. It is used in the computation of the logical X and Z operators of a MixedDestabilizer.

It returns the (in place) modified state, the indices of the last pivot of both Gaussian elimination steps, and the permutations that have been used to put the X and Z tableaux in standard form.

Based on (Gottesman, 1997).

See also: canonicalize!, canonicalize_rref!

source
QuantumClifford.canonicalize_gott!Method

Inplace Gottesman canonicalization of a tableau.

This uses different canonical form from canonicalize!. It is used in the computation of the logical X and Z operators of a MixedDestabilizer.

It returns the (in place) modified state, the indices of the last pivot of both Gaussian elimination steps, and the permutations that have been used to put the X and Z tableaux in standard form.

Based on (Gottesman, 1997).

See also: canonicalize!, canonicalize_rref!

source
QuantumClifford.canonicalize_rref!Method
canonicalize_rref!(
     state::QuantumClifford.AbstractStabilizer,
     colindices;
     phases
 ) -> Tuple{QuantumClifford.AbstractStabilizer, Any}
-

Canonicalize a stabilizer (in place) along only some columns.

This uses different canonical form from canonicalize!. It also indexes in reverse in order to make its use in traceout! more efficient. Its use in traceout! is its main application.

It returns the (in place) modified state and the index of the last pivot.

Based on (Audenaert and Plenio, 2005).

See also: canonicalize!, canonicalize_gott!

source
QuantumClifford.centralizerMethod

For a given set of Paulis (in the form of a Tableau), return the subset of Paulis that commute with all Paulis in set.

julia> centralizer(T"XX ZZ _Z")
-+ ZZ
source
QuantumClifford.clifford_cardinalityMethod

The size of the Clifford group 𝒞 over a given number of qubits, possibly modulo the phases.

For n qubits, not accounting for phases is 2ⁿⁿΠⱼ₌₁ⁿ(4ʲ-1). There are 4ⁿ different phase configurations.

julia> clifford_cardinality(7)
+
source
QuantumClifford.centralizerMethod

For a given set of Paulis (in the form of a Tableau), return the subset of Paulis that commute with all Paulis in set.

julia> centralizer(T"XX ZZ _Z")
++ ZZ
source
QuantumClifford.clifford_cardinalityMethod

The size of the Clifford group 𝒞 over a given number of qubits, possibly modulo the phases.

For n qubits, not accounting for phases is 2ⁿⁿΠⱼ₌₁ⁿ(4ʲ-1). There are 4ⁿ different phase configurations.

julia> clifford_cardinality(7)
 457620995529680351512370381586432000

When not accounting for phases (phases = false) the result is the same as the size of the Symplectic group Sp(2n) ≡ 𝒞ₙ/𝒫ₙ, where 𝒫ₙ is the Pauli group over n qubits.

julia> clifford_cardinality(7, phases=false)
-27930968965434591767112450048000

See also: enumerate_cliffords.

source
QuantumClifford.commFunction

Check whether two operators commute.

0x0 if they commute, 0x1 if they anticommute.

julia> P"XX"*P"ZZ", P"ZZ"*P"XX"
 (- YY, - YY)
 
 julia> comm(P"ZZ", P"XX")
 0x00
 
 julia> comm(P"IZ", P"XX")
-0x01

See also: comm!

source
QuantumClifford.compactify_circuitMethod

Convert a list of gates to a more optimized "sum type" format which permits faster dispatch.

Generally, this should be called on a circuit before it is used in a simulation.

source
QuantumClifford.contractorMethod

Return the subset of Paulis in a Stabilizer that have identity operators on all qubits corresponding to the given subset, without the entries corresponding to subset.

julia> contractor(S"_X X_", [1])
-+ X
source
QuantumClifford.delete_columnsMethod

Return the given stabilizer without all the qubits in the given iterable.

The resulting tableaux is not guaranteed to be valid (to retain its commutation relationships).

julia> delete_columns(S"XYZ YZX ZXY", [1,3])
+0x01

See also: comm!

source
QuantumClifford.compactify_circuitMethod

Convert a list of gates to a more optimized "sum type" format which permits faster dispatch.

Generally, this should be called on a circuit before it is used in a simulation.

source
QuantumClifford.contractorMethod

Return the subset of Paulis in a Stabilizer that have identity operators on all qubits corresponding to the given subset, without the entries corresponding to subset.

julia> contractor(S"_X X_", [1])
++ X
source
QuantumClifford.delete_columnsMethod

Return the given stabilizer without all the qubits in the given iterable.

The resulting tableaux is not guaranteed to be valid (to retain its commutation relationships).

julia> delete_columns(S"XYZ YZX ZXY", [1,3])
 + Y
 + Z
-+ X

See also: traceout!

source
QuantumClifford.enumerate_single_qubit_gatesMethod

Generate a symbolic single-qubit gate given its index. Optionally, set non-trivial phases.

julia> enumerate_single_qubit_gates(6)
 sPhase on qubit 1
 X₁ ⟼ + Y
 Z₁ ⟼ + Z
@@ -327,7 +327,7 @@
 julia> enumerate_single_qubit_gates(6, qubit=2, phases=(true, true))
 SingleQubitOperator on qubit 2
 X₁ ⟼ - Y
-Z₁ ⟼ - Z

See also: enumerate_cliffords.

source
QuantumClifford.fastcolumnFunction

Convert a tableau to a memory layout that is fast for column operations.

In this layout a column of the tableau is stored (mostly) contiguously in memory. Due to bitpacking, e.g., packing 64 bits into a single UInt64, the memory layout is not perfectly contiguous, but it is still optimal given that some bitwrangling is required to extract a given bit.

See also: fastrow

source
QuantumClifford.fastrowFunction

Convert a tableau to a memory layout that is fast for row operations.

In this layout a Pauli string (a row of the tableau) is stored contiguously in memory.

See also: fastrow

source
QuantumClifford.generate!Method

Generate a Pauli operator by using operators from a given the Stabilizer.

It assumes the stabilizer is already canonicalized. It modifies the Pauli operator in place, generating it in reverse, up to a phase. That phase is left in the modified operator, which should be the identity up to a phase. Returns the new operator and the list of indices denoting the elements of stabilizer that were used for the generation.

julia> ghz = S"XXXX
+Z₁ ⟼ - Z

See also: enumerate_cliffords.

source
QuantumClifford.fastcolumnFunction

Convert a tableau to a memory layout that is fast for column operations.

In this layout a column of the tableau is stored (mostly) contiguously in memory. Due to bitpacking, e.g., packing 64 bits into a single UInt64, the memory layout is not perfectly contiguous, but it is still optimal given that some bitwrangling is required to extract a given bit.

See also: fastrow

source
QuantumClifford.fastrowFunction

Convert a tableau to a memory layout that is fast for row operations.

In this layout a Pauli string (a row of the tableau) is stored contiguously in memory.

See also: fastrow

source
QuantumClifford.generate!Method

Generate a Pauli operator by using operators from a given the Stabilizer.

It assumes the stabilizer is already canonicalized. It modifies the Pauli operator in place, generating it in reverse, up to a phase. That phase is left in the modified operator, which should be the identity up to a phase. Returns the new operator and the list of indices denoting the elements of stabilizer that were used for the generation.

julia> ghz = S"XXXX
                ZZII
                IZZI
                IIZZ";
@@ -344,7 +344,7 @@
 true
 
 julia> generate!(P"XII",canonicalize!(S"XII")) === nothing
-false
source
QuantumClifford.ghzFunction

Prepare a GHZ state of n qubits.

julia> ghz()
 + XXX
 + ZZ_
 + _ZZ
@@ -357,7 +357,7 @@
 + XXXX
 + ZZ__
 + _ZZ_
-+ __ZZ
source
QuantumClifford.graphstateMethod

Convert any stabilizer state to a graph state

Graph states are a special type of entangled stabilizer states that can be represented by a graph. For a graph $G=(V,E)$ the corresponding stabilizers are $S_v = X_v \prod_{u ∈ N(v)} Z_u$. Notice that such tableau rows contain only a single X operator. There is a set of single qubit gates that converts any stabilizer state to a graph state.

This function returns the graph state corresponding to a stabilizer and the gates that might be necessary to convert the stabilizer into a state representable as a graph.

For a tableau stab you can convert it with:

graph, hadamard_idx, iphase_idx, flips_idx = graphstate()

where graph is the graph representation of stab, and the rest specifies the single-qubit gates converting stab to graph: hadamard_idx are the qubits that require a Hadamard gate (mapping X ↔ Z), iphase_idx are (different) qubits that require an inverse Phase gate (Y → X), and flips_idx are the qubits that require a phase flip (Pauli Z gate), after the previous two sets of gates.

julia> using Graphs
+true

See also: graph_gatesequence

source
QuantumClifford.graphstateMethod

Convert any stabilizer state to a graph state

Graph states are a special type of entangled stabilizer states that can be represented by a graph. For a graph $G=(V,E)$ the corresponding stabilizers are $S_v = X_v \prod_{u ∈ N(v)} Z_u$. Notice that such tableau rows contain only a single X operator. There is a set of single qubit gates that converts any stabilizer state to a graph state.

This function returns the graph state corresponding to a stabilizer and the gates that might be necessary to convert the stabilizer into a state representable as a graph.

For a tableau stab you can convert it with:

graph, hadamard_idx, iphase_idx, flips_idx = graphstate()

where graph is the graph representation of stab, and the rest specifies the single-qubit gates converting stab to graph: hadamard_idx are the qubits that require a Hadamard gate (mapping X ↔ Z), iphase_idx are (different) qubits that require an inverse Phase gate (Y → X), and flips_idx are the qubits that require a phase flip (Pauli Z gate), after the previous two sets of gates.

julia> using Graphs
 
 julia> s = S" XXX
               ZZ_
@@ -421,15 +421,15 @@
 1-element Vector{Int64}:
  3

The Graphs.jl library provides many graph-theory tools and the MakieGraphs.jl library provides plotting utilities for graphs.

You can directly call the graph constructor on a stabilizer, if you just want the graph and do not care about the Clifford operation necessary to convert an arbitrary state to a state representable as a graph:

julia> collect(edges( Graph(bell()) ))
 1-element Vector{Graphs.SimpleGraphs.SimpleEdge{Int64}}:
- Edge 1 => 2

For a version that does not copy the stabilizer, but rather performs transformations in-place, use graphstate!. It would perform canonicalize_gott! on its argument as it finds a way to convert it to a graph state.

source
QuantumClifford.groupifyMethod

Return the full stabilizer group represented by the input generating set (a Stabilizer).

The returned object is exponentially long.

julia> groupify(S"XZ ZX")
+ Edge 1 => 2

For a version that does not copy the stabilizer, but rather performs transformations in-place, use graphstate!. It would perform canonicalize_gott! on its argument as it finds a way to convert it to a graph state.

source
QuantumClifford.groupifyMethod

Return the full stabilizer group represented by the input generating set (a Stabilizer).

The returned object is exponentially long.

julia> groupify(S"XZ ZX")
 + __
 + XZ
 + ZX
-+ YY
source
QuantumClifford.logdotMethod

Logarithm of the inner product between to Stabilizer states.

If the result is nothing, the dot inner product is zero. Otherwise the inner product is 2^(-logdot/2).

The actual inner product can be computed with LinearAlgebra.dot.

Based on (Garcia et al., 2012).

source
QuantumClifford.minimal_generating_setMethod

For a not-necessarily-minimal generating set, return the minimal generating set.

The input has to have only real phases.

julia> minimal_generating_set(S"__ XZ ZX YY")
++ YY
source
QuantumClifford.logdotMethod

Logarithm of the inner product between to Stabilizer states.

If the result is nothing, the dot inner product is zero. Otherwise the inner product is 2^(-logdot/2).

The actual inner product can be computed with LinearAlgebra.dot.

Based on (Garcia et al., 2012).

source
QuantumClifford.minimal_generating_setMethod

For a not-necessarily-minimal generating set, return the minimal generating set.

The input has to have only real phases.

julia> minimal_generating_set(S"__ XZ ZX YY")
 + XZ
-+ ZX
source
QuantumClifford.normalizerMethod

Return all Pauli operators with the same number of qubits as the given Tableau t that commute with all operators in t.

julia> normalizer(T"X")
++ ZX
source
QuantumClifford.normalizerMethod

Return all Pauli operators with the same number of qubits as the given Tableau t that commute with all operators in t.

julia> normalizer(T"X")
 + _
-+ X
source
QuantumClifford.pauligroupMethod

Return the full Pauli group of a given length. Phases are ignored by default, but can be included by setting phases=true.

julia> pauligroup(1)
++ X
source
QuantumClifford.pauligroupMethod

Return the full Pauli group of a given length. Phases are ignored by default, but can be included by setting phases=true.

julia> pauligroup(1)
 + _
 + X
 + Z
@@ -451,32 +451,32 @@
 -i_
 -iX
 -iZ
--iY
source
QuantumClifford.pfmeasurementsMethod
pfmeasurements(frame::PauliFrame) -> Any
-

Returns the measurement results for each frame in the PauliFrame instance.

Relative measurements

The return measurements are relative to the reference measurements, i.e. they only say whether the reference measurements have been flipped in the given frame.

source
QuantumClifford.pfmeasurementsMethod
pfmeasurements(register::Register, frame::PauliFrame) -> Any
-

Takes the references measurements from the given Register and applies the flips as prescribed by the PauliFrame relative measurements. The result is the actual (non-relative) measurement results for each frame.

source
QuantumClifford.pfmeasurementsMethod
pfmeasurements(frame::PauliFrame) -> Any
+

Returns the measurement results for each frame in the PauliFrame instance.

Relative measurements

The return measurements are relative to the reference measurements, i.e. they only say whether the reference measurements have been flipped in the given frame.

source
QuantumClifford.pfmeasurementsMethod
pfmeasurements(register::Register, frame::PauliFrame) -> Any
+

Takes the references measurements from the given Register and applies the flips as prescribed by the PauliFrame relative measurements. The result is the actual (non-relative) measurement results for each frame.

source
QuantumClifford.pftrajectoriesMethod
pftrajectories(
     circuit;
     trajectories,
     threads
 ) -> PauliFrame{Stabilizer{QuantumClifford.Tableau{Vector{UInt8}, LinearAlgebra.Adjoint{UInt64, Matrix{UInt64}}}}, Matrix{Bool}}
-

The main method for running Pauli frame simulations of circuits. See the other methods for lower level access.

Multithreading is enabled by default, but can be disabled by setting threads=false. Do not forget to launch Julia with multiple threads enabled, e.g. julia -t4, if you want to use multithreading.

See also: mctrajectories, petrajectories

source
QuantumClifford.pftrajectoriesMethod
pftrajectories(
+

The main method for running Pauli frame simulations of circuits. See the other methods for lower level access.

Multithreading is enabled by default, but can be disabled by setting threads=false. Do not forget to launch Julia with multiple threads enabled, e.g. julia -t4, if you want to use multithreading.

See also: mctrajectories, petrajectories

source
QuantumClifford.pftrajectoriesMethod
pftrajectories(
     register::Register,
     circuit;
     trajectories
 ) -> Tuple{Register, PauliFrame{Stabilizer{QuantumClifford.Tableau{Vector{UInt8}, LinearAlgebra.Adjoint{UInt64, Matrix{UInt64}}}}, Matrix{Bool}}}
-

For a given Register and circuit, simulates the reference circuit acting on the register and then also simulate numerous PauliFrame trajectories. Returns the register and the PauliFrame instance.

Use pfmeasurements to get the measurement results.

source
QuantumClifford.phasesMethod

The phases of a given tableau. It is a view, i.e. if you modify this array, the original tableau caries these changes.

source
QuantumClifford.prodphaseMethod

Get the phase of the product of two Pauli operators.

Phase is encoded as F(4) in the low qubits of an UInt8.

julia> P"ZZZ"*P"XXX"
+

For a given Register and circuit, simulates the reference circuit acting on the register and then also simulate numerous PauliFrame trajectories. Returns the register and the PauliFrame instance.

Use pfmeasurements to get the measurement results.

source
QuantumClifford.phasesMethod

The phases of a given tableau. It is a view, i.e. if you modify this array, the original tableau caries these changes.

source
QuantumClifford.prodphaseMethod

Get the phase of the product of two Pauli operators.

Phase is encoded as F(4) in the low qubits of an UInt8.

julia> P"ZZZ"*P"XXX"
 -iYYY
 
 julia> prodphase(P"ZZZ", P"XXX")
 0x03
 
 julia> prodphase(P"XXX", P"ZZZ")
-0x01
source
QuantumClifford.random_brickwork_clifford_circuitMethod

Random brickwork Clifford circuit.

The connectivity of the random circuit is brickwork in some dimensions. Each gate in the circuit is a random 2-qubit Clifford gate.

The brickwork is defined as follows: The qubits are arranged as a lattice, and lattice_size contains side length in each dimension. For example, a chain of length five will have lattice_size = (5,), and a 5×5 lattice will have lattice_size = (5, 5).

In multi-dimensional cases, gate layers act alternatively along each direction. The nearest two layers along the same direction are offset by one qubit, forming a so-called brickwork. The boundary condition is chosen as open.

source
QuantumClifford.random_pauliFunction

A random Pauli operator on n qubits.

Use nophase=false to randomize the phase. Use realphase=false to get operators with phases including ±i.

Optionally, a "flip" probability p can be provided specified, in which case each bit is set to I with probability 1-p and to X or Y or Z with probability p. Useful for simulating unbiased Pauli noise.

See also random_pauli!

source
QuantumClifford.stabilizerplotFunction

A Makie.jl recipe for pictorial representation of a tableau.

Requires a Makie.jl backend to be loaded, e.g. using CairoMakie.

Alternatively, you can use the Plots.jl plotting ecosystem, e.g. using Plots; plot(S"XXX ZZZ").

Consult the documentation for more details on visualization options.

source
QuantumClifford.stabilizerplot_axisFunction

A Makie.jl recipe for pictorial representation of a tableau.

Requires a Makie.jl backend to be loaded, e.g. using CairoMakie.

Alternatively, you can use the Plots.jl plotting ecosystem, e.g. using Plots; plot(S"XXX ZZZ").

Consult the documentation for more details on visualization options.

source
QuantumClifford.random_brickwork_clifford_circuitMethod

Random brickwork Clifford circuit.

The connectivity of the random circuit is brickwork in some dimensions. Each gate in the circuit is a random 2-qubit Clifford gate.

The brickwork is defined as follows: The qubits are arranged as a lattice, and lattice_size contains side length in each dimension. For example, a chain of length five will have lattice_size = (5,), and a 5×5 lattice will have lattice_size = (5, 5).

In multi-dimensional cases, gate layers act alternatively along each direction. The nearest two layers along the same direction are offset by one qubit, forming a so-called brickwork. The boundary condition is chosen as open.

source
QuantumClifford.random_pauliFunction

A random Pauli operator on n qubits.

Use nophase=false to randomize the phase. Use realphase=false to get operators with phases including ±i.

Optionally, a "flip" probability p can be provided specified, in which case each bit is set to I with probability 1-p and to X or Y or Z with probability p. Useful for simulating unbiased Pauli noise.

See also random_pauli!

source
QuantumClifford.stabilizerplotFunction

A Makie.jl recipe for pictorial representation of a tableau.

Requires a Makie.jl backend to be loaded, e.g. using CairoMakie.

Alternatively, you can use the Plots.jl plotting ecosystem, e.g. using Plots; plot(S"XXX ZZZ").

Consult the documentation for more details on visualization options.

source
QuantumClifford.stabilizerplot_axisFunction

A Makie.jl recipe for pictorial representation of a tableau.

Requires a Makie.jl backend to be loaded, e.g. using CairoMakie.

Alternatively, you can use the Plots.jl plotting ecosystem, e.g. using Plots; plot(S"XXX ZZZ").

Consult the documentation for more details on visualization options.

source
QuantumClifford.xbitMethod

Extract as a new bit array the X part of the UInt array of packed qubits of a given Pauli operator.

source
QuantumClifford.zbitMethod

Extract as a new bit array the Z part of the UInt array of packed qubits of a given Pauli operator.

source
QuantumInterface.apply!Function

In QuantumClifford the apply! function is used to apply any quantum operation to a stabilizer state, including unitary Clifford operations, Pauli measurements, and noise. Thus, this function may result in a random/stochastic result (e.g. with measurements or noise).

source
QuantumClifford.xbitMethod

Extract as a new bit array the X part of the UInt array of packed qubits of a given Pauli operator.

source
QuantumClifford.zbitMethod

Extract as a new bit array the Z part of the UInt array of packed qubits of a given Pauli operator.

source
QuantumInterface.apply!Function

In QuantumClifford the apply! function is used to apply any quantum operation to a stabilizer state, including unitary Clifford operations, Pauli measurements, and noise. Thus, this function may result in a random/stochastic result (e.g. with measurements or noise).

source
QuantumInterface.embedMethod

Embed a Pauli operator in a larger Pauli operator.

julia> embed(5, 3, P"-Y")
 - __Y__
 
 julia> embed(5, (3,5), P"-YX")
-- __Y_X
source
QuantumInterface.entanglement_entropyFunction

Get bipartite entanglement entropy of a subsystem

Defined as entropy of the reduced density matrix.

It can be calculated with multiple different algorithms, the most performant one depending on the particular case.

Currently implemented are the :clip (clipped gauge), :graph (graph state), and :rref (Gaussian elimination) algorithms. Benchmark your particular case to choose the best one.

source
QuantumInterface.entanglement_entropyMethod

Get bipartite entanglement entropy by first converting the state to a graph and computing the rank of the adjacency matrix.

Based on "Entanglement in graph states and its applications".

source
QuantumInterface.expectMethod
expect(p::PauliOperator, st::AbstractStabilizer)

Compute the expectation value of a Pauli operator p on a stabilizer state st. This function will allocate a temporary copy of the stabilizer state st.

source
QuantumInterface.entanglement_entropyFunction

Get bipartite entanglement entropy of a subsystem

Defined as entropy of the reduced density matrix.

It can be calculated with multiple different algorithms, the most performant one depending on the particular case.

Currently implemented are the :clip (clipped gauge), :graph (graph state), and :rref (Gaussian elimination) algorithms. Benchmark your particular case to choose the best one.

source
QuantumInterface.entanglement_entropyMethod

Get bipartite entanglement entropy by first converting the state to a graph and computing the rank of the adjacency matrix.

Based on "Entanglement in graph states and its applications".

source
QuantumInterface.expectMethod
expect(p::PauliOperator, st::AbstractStabilizer)

Compute the expectation value of a Pauli operator p on a stabilizer state st. This function will allocate a temporary copy of the stabilizer state st.

source
QuantumInterface.project!Method
project!(
     state::MixedStabilizer,
     pauli::PauliOperator;
     phases
@@ -611,25 +611,25 @@
 julia> project!(ms, P"IIY")[1]
 + X__
 + _Z_
-+ __Y

Similarly to project! on Stabilizer, this function has cubic complexity when the Pauli operator commutes with all rows of the tableau. Most of the time it is better to simply use MixedDestabilizer representation.

Unlike other project! methods, this one does not allow for keep_result=false, as the correct rank or anticommutation index can not be calculated without the expensive (cubic) canonicalization operation required by keep_result=true.

See the "Datastructure Choice" section in the documentation for more details.

See also: projectX!, projectY!, projectZ!.

source
QuantumInterface.reset_qubits!Method
reset_qubits!(
++ __Y

Similarly to project! on Stabilizer, this function has cubic complexity when the Pauli operator commutes with all rows of the tableau. Most of the time it is better to simply use MixedDestabilizer representation.

Unlike other project! methods, this one does not allow for keep_result=false, as the correct rank or anticommutation index can not be calculated without the expensive (cubic) canonicalization operation required by keep_result=true.

See the "Datastructure Choice" section in the documentation for more details.

See also: projectX!, projectY!, projectZ!.

source
QuantumInterface.reset_qubits!Method
reset_qubits!(
     s::Stabilizer,
     newstate,
     qubits;
     phases
 ) -> Any
-

Reset a given set of qubits to be in the state newstate. These qubits are traced out first, which could lead to "nonlocal" changes in the tableau.

source
QuantumInterface.tensorFunction

Tensor product between operators or tableaux.

Tensor product between CiffordOperators:

julia> tensor(CliffordOperator(sCNOT), CliffordOperator(sCNOT))
+

Reset a given set of qubits to be in the state newstate. These qubits are traced out first, which could lead to "nonlocal" changes in the tableau.

source
QuantumInterface.tensorFunction

Tensor product between operators or tableaux.

Tensor product between CiffordOperators:

julia> tensor(CliffordOperator(sCNOT), CliffordOperator(sCNOT))
 X₁ ⟼ + XX__
 X₂ ⟼ + _X__
 X₃ ⟼ + __XX
@@ -656,7 +656,7 @@
 + XZ____
 - _Z____
 + ___XZ_
-- ____Z_

See also tensor_pow.

source
QuantumInterface.tensor_powMethod

Repeated tensor product of an operators or a tableau.

For CliffordOperator:

julia> tensor_pow(CliffordOperator(sHadamard), 3)
 X₁ ⟼ + Z__
 X₂ ⟼ + _Z_
 X₃ ⟼ + __Z
@@ -678,14 +678,14 @@
 + ___XZ____
 + ____Z____
 + ______XZ_
-+ _______Z_

See also tensor.

source

Private API

Private Implementation Details

These functions are used internally by the library and might be drastically modified or deleted without warning or deprecation.

QuantumClifford.TableauType

Internal Tableau type for storing a list of Pauli operators in a compact form. No special semantic meaning is attached to this type, it is just a convenient way to store a list of Pauli operators. E.g. it is not used to represent a stabilizer state, or a stabilizer group, or a Clifford circuit.

source

Private API

Private Implementation Details

These functions are used internally by the library and might be drastically modified or deleted without warning or deprecation.

QuantumClifford.TableauType

Internal Tableau type for storing a list of Pauli operators in a compact form. No special semantic meaning is attached to this type, it is just a convenient way to store a list of Pauli operators. E.g. it is not used to represent a stabilizer state, or a stabilizer group, or a Clifford circuit.

source
Base.invMethod
inv(
     c::CliffordOperator;
     phases
 ) -> CliffordOperator{QuantumClifford.Tableau{Vector{UInt8}, Matrix{UInt64}}}
@@ -703,24 +703,24 @@
 
 julia> inv(CliffordOperator(tHadamard))
 X₁ ⟼ + Z
-Z₁ ⟼ + X
source
QuantumClifford._remove_rowcol!Method

Unexported low-level function that removes a row (by shifting all rows up as necessary)

Because MixedDestabilizer is not mutable we return a new MixedDestabilizer with the same (modified) xzs array.

Used on its own, this function will break invariants. Meant to be used with projectremove!.

source
QuantumClifford._rowmove!Method

Unexported low-level function that moves row i to row j.

Used on its own, this function will break invariants. Meant to be used in _remove_rowcol!.

source
QuantumClifford.applynoise_branchesFunction

Compute all possible new states after the application of the given noise model. Reports the probability of each one of them. Deterministic (as it reports all branches of potentially random processes), part of the Noise interface.

source
QuantumClifford.initZ!Method
initZ!(frame::PauliFrame) -> PauliFrame
-

Inject random Z errors over all frames and qubits for the supplied PauliFrame with probability 0.5.

Calling this after initialization is essential for simulating any non-deterministic circuit. It is done automatically by most PauliFrame constructors.

source
QuantumClifford._remove_rowcol!Method

Unexported low-level function that removes a row (by shifting all rows up as necessary)

Because MixedDestabilizer is not mutable we return a new MixedDestabilizer with the same (modified) xzs array.

Used on its own, this function will break invariants. Meant to be used with projectremove!.

source
QuantumClifford._rowmove!Method

Unexported low-level function that moves row i to row j.

Used on its own, this function will break invariants. Meant to be used in _remove_rowcol!.

source
QuantumClifford.applynoise_branchesFunction

Compute all possible new states after the application of the given noise model. Reports the probability of each one of them. Deterministic (as it reports all branches of potentially random processes), part of the Noise interface.

source
QuantumClifford.initZ!Method
initZ!(frame::PauliFrame) -> PauliFrame
+

Inject random Z errors over all frames and qubits for the supplied PauliFrame with probability 0.5.

Calling this after initialization is essential for simulating any non-deterministic circuit. It is done automatically by most PauliFrame constructors.

source
QuantumClifford.make_sumtype_methodFunction

``` julia> makesumtypemethod([sCNOT], :apply!, (:s,)) quote function QuantumClifford.apply!(s, g::CompactifiedGate) @cases g begin sCNOT(q1, q2) => apply!(s, sCNOT(q1, q2)) end end end

source
QuantumClifford.make_sumtype_methodFunction

``` julia> makesumtypemethod([sCNOT], :apply!, (:s,)) quote function QuantumClifford.apply!(s, g::CompactifiedGate) @cases g begin sCNOT(q1, q2) => apply!(s, sCNOT(q1, q2)) end end end

source
QuantumClifford.projectremoverand!Method

Unexported low-level function that projects a qubit and returns the result while making the tableau smaller by a qubit.

Because MixedDestabilizer is not mutable we return a new MixedDestabilizer with the same (modified) xzs array.

source
QuantumClifford.remove_column!Method

Unexported low-level function that removes a column (by shifting all columns to the right of the target by one step to the left)

Because Tableau is not mutable we return a new Tableau with the same (modified) xzs array.

source
QuantumClifford.rowdecomposeMethod

Decompose a Pauli $P$ in terms of stabilizer and destabilizer rows from a given tableaux.

For given tableaux of rows destabilizer rows $\{d_i\}$ and stabilizer rows $\{s_i\}$, there are boolean vectors $b$ and $c$ such that $P = i^p \prod_i d_i^{b_i} \prod_i s_i^{c_i}$.

This function returns p, b, c.

julia> s = MixedDestabilizer(ghz(2))
+end)
source
QuantumClifford.projectremoverand!Method

Unexported low-level function that projects a qubit and returns the result while making the tableau smaller by a qubit.

Because MixedDestabilizer is not mutable we return a new MixedDestabilizer with the same (modified) xzs array.

source
QuantumClifford.remove_column!Method

Unexported low-level function that removes a column (by shifting all columns to the right of the target by one step to the left)

Because Tableau is not mutable we return a new Tableau with the same (modified) xzs array.

source
QuantumClifford.rowdecomposeMethod

Decompose a Pauli $P$ in terms of stabilizer and destabilizer rows from a given tableaux.

For given tableaux of rows destabilizer rows $\{d_i\}$ and stabilizer rows $\{s_i\}$, there are boolean vectors $b$ and $c$ such that $P = i^p \prod_i d_i^{b_i} \prod_i s_i^{c_i}$.

This function returns p, b, c.

julia> s = MixedDestabilizer(ghz(2))
 𝒟ℯ𝓈𝓉𝒶𝒷
 + Z_
 + _X
@@ -732,7 +732,7 @@
 (3, Bool[1, 0], Bool[1, 1])
 
 julia> im^3 * P"Z_" * P"XX" * P"ZZ"
-+ XY
source
QuantumClifford.to_cpuFunction

copies the memory content of the object to CPU

You can only use this function if CUDA.jl is imported

For more advanced users to_cpu(data, element_type) will reinterpret elements of data and converts them to element_type. For example based on your CPU architecture, if working with matrices of UInt32 is faster than UInt64, you can use to_cpu(data, UInt32)

julia> using QuantumClifford: to_cpu, to_gpu
++ XY
source
QuantumClifford.to_cpuFunction

copies the memory content of the object to CPU

You can only use this function if CUDA.jl is imported

For more advanced users to_cpu(data, element_type) will reinterpret elements of data and converts them to element_type. For example based on your CPU architecture, if working with matrices of UInt32 is faster than UInt64, you can use to_cpu(data, UInt32)

julia> using QuantumClifford: to_cpu, to_gpu
 
 julia> using CUDA # without this import, to_cpu, to_gpu are just function
 
@@ -755,7 +755,7 @@
 julia> pf_gpu = to_gpu(PauliFrame(1000, 2, 2));
 julia> circuit = [sMZ(1, 1), sHadamard(2), sMZ(2, 2)];
 julia> pftrajectories(pf_gpu, circuit);
-julia> measurements = to_cpu(pf_gpu.measurements);

See also: to_gpu

source
QuantumClifford.to_gpuFunction

copies the memory content of the object to GPU

You can only use this function if CUDA.jl is imported

For more advanced users to_gpu(data, element_type) will reinterpret elements of data and converts them to element_type. For example based on your GPU architecture, if working with matrices of UInt64 is faster than UInt32, you can use to_gpu(data, UInt64)

julia> using QuantumClifford: to_cpu, to_gpu
+julia> measurements = to_cpu(pf_gpu.measurements);

See also: to_gpu

source
QuantumClifford.to_gpuFunction

copies the memory content of the object to GPU

You can only use this function if CUDA.jl is imported

For more advanced users to_gpu(data, element_type) will reinterpret elements of data and converts them to element_type. For example based on your GPU architecture, if working with matrices of UInt64 is faster than UInt32, you can use to_gpu(data, UInt64)

julia> using QuantumClifford: to_cpu, to_gpu
 
 julia> using CUDA # without this import, to_cpu, to_gpu are just function
 
@@ -778,4 +778,4 @@
 julia> pf_gpu = to_gpu(PauliFrame(1000, 2, 2));
 julia> circuit = [sMZ(1, 1), sHadamard(2), sMZ(2, 2)];
 julia> pftrajectories(pf_gpu, circuit);
-julia> measurements = to_cpu(pf_gpu.measurements);

See also: to_cpu

source
+julia> measurements = to_cpu(pf_gpu.measurements);

See also: to_cpu

source
QuantumClifford.trusted_rankFunction

A "trusted" rank which returns rank(state) for Mixed[De]Stabilizer and length(state) for [De]Stabilizer.

source
QuantumClifford.zero!Method

Zero-out a given row of a Tableau

source
QuantumClifford.zero!Method

Zero-out the phases and single-qubit operators in a PauliOperator

source
QuantumClifford.@qubitop1Macro

Macro used to define single qubit symbolic gates and their qubit_kernel methods.

source
QuantumClifford.@qubitop2Macro

Macro used to define 2-qubit symbolic gates and their qubit_kernel methods.

source
QuantumClifford.@valbooldispatchMacro

Turns f(Val(x)) into x ? f(Val(true)) : f(Val(false)) in order to avoid dynamic dispatch

See discourse discussion

source
diff --git a/dev/ECC_API/index.html b/dev/ECC_API/index.html index 65b7c6e1b..0f7132149 100644 --- a/dev/ECC_API/index.html +++ b/dev/ECC_API/index.html @@ -2,7 +2,7 @@ API · QuantumClifford.jl

Full ECC API (autogenerated)

QuantumClifford.ECC.CSSType

An arbitrary CSS error correcting code defined by its X and Z checks.

julia> CSS([0 1 1 0; 1 1 0 0], [1 1 1 1]) |> parity_checks
 + _XX_
 + XX__
-+ ZZZZ
source
QuantumClifford.ECC.ConcatType

Concat(c₁, c₂) is a code concatenation of two quantum codes (Knill and Laflamme, 1996).

The inner code c₁ and the outer code c₂. The construction is the following: replace each qubit in code c₂ with logical qubits encoded by code c₁. The resulting code will have n = n₁ × n₂ qubits and k = k₁ × k₂ logical qubits.

source
QuantumClifford.ECC.ShorSyndromeECCSetupType

Configuration for ECC evaluators that simulate the Shor-style syndrome measurement (without a flag qubit).

The simulated circuit includes:

  • perfect noiseless encoding (encoding and its fault tolerance are not being studied here)
  • one round of "memory noise" after the encoding but before the syndrome measurement
  • perfect preparation of entangled ancillary qubits
  • noisy Shor-style syndrome measurement (only two-qubit gate noise)
  • noiseless "logical state measurement" (providing the comparison data when evaluating the decoder)

See also: CommutationCheckECCSetup, NaiveSyndromeECCSetup

source
QuantumClifford.ECC.SurfaceType

The planar surface code refers to the code (Kitaev, 2003) in a 2D lattice with open boundaries.

Illustration of a 3×2 surface code, where qubits are located on the edges:

|---1--(Z)--2---|---3---|
++ ZZZZ
source
QuantumClifford.ECC.ConcatType

Concat(c₁, c₂) is a code concatenation of two quantum codes (Knill and Laflamme, 1996).

The inner code c₁ and the outer code c₂. The construction is the following: replace each qubit in code c₂ with logical qubits encoded by code c₁. The resulting code will have n = n₁ × n₂ qubits and k = k₁ × k₂ logical qubits.

source
QuantumClifford.ECC.ShorSyndromeECCSetupType

Configuration for ECC evaluators that simulate the Shor-style syndrome measurement (without a flag qubit).

The simulated circuit includes:

  • perfect noiseless encoding (encoding and its fault tolerance are not being studied here)
  • one round of "memory noise" after the encoding but before the syndrome measurement
  • perfect preparation of entangled ancillary qubits
  • noisy Shor-style syndrome measurement (only two-qubit gate noise)
  • noiseless "logical state measurement" (providing the comparison data when evaluating the decoder)

See also: CommutationCheckECCSetup, NaiveSyndromeECCSetup

source
QuantumClifford.ECC.SurfaceType

The planar surface code refers to the code (Kitaev, 2003) in a 2D lattice with open boundaries.

Illustration of a 3×2 surface code, where qubits are located on the edges:

|---1--(Z)--2---|---3---|
 |  (X)  7       8       o
 |---4---|---5---|---6---|
 |       o       o       o
@@ -13,7 +13,7 @@
 + ZZ____Z_
 + _ZZ____Z
 + ___ZZ_Z_
-+ ____ZZ_Z

More information can be seen in (Fowler et al., 2012).

source
QuantumClifford.ECC.TableDecoderType

A simple look-up table decoder for error correcting codes.

The lookup table contains only weight=1 errors, thus it is small, but at best it provides only for distance=3 decoding.

The size of the lookup table would grow exponentially quickly for higher distances.

source
QuantumClifford.ECC.TableDecoderType

A simple look-up table decoder for error correcting codes.

The lookup table contains only weight=1 errors, thus it is small, but at best it provides only for distance=3 decoding.

The size of the lookup table would grow exponentially quickly for higher distances.

source
QuantumClifford.ECC.ToricType

The Toric code (Kitaev, 2003).

Illustration of a 2x2 toric code, where qubits are located on the edges:

|--1-(Z)-2--|
 | (X) 5     6
 |--3--|--4--|
 |     7     8
@@ -23,7 +23,7 @@
 + X_X___XX
 + ZZ__Z_Z_
 + ZZ___Z_Z
-+ __ZZZ_Z_
source
QuantumClifford.ECC.evaluate_decoderMethod

Evaluate the performance of an error-correcting circuit.

This method requires you give the circuit that performs both syndrome measurements and (probably noiseless) logical state measurements. The faults matrix that translates an error vector into corresponding logical errors is necessary as well.

This is a relatively barebones method that assumes the user prepares necessary circuits, etc. It is a method that is used internally by more user-frienly methods providing automatic conversion of codes and noise models to the necessary noisy circuits.

source
QuantumClifford.ECC.faults_matrixMethod

Error-to-logical-observable map (a.k.a. fault matrix) of a code.

For a code with n physical qubits and k logical qubits this function returns a 2k × 2n binary matrix O such that O[i,j] is true if the logical observable of index i is flipped by the single physical qubit error of index j. Indexing is such that:

  • O[1:k,:] is the error-to-logical-X-observable map (logical X observable, i.e. triggered by logical Z errors)
  • O[k+1:2k,:] is the error-to-logical-Z-observable map
  • O[:,1:n] is the X-physical-error-to-logical-observable map
  • O[n+1:2n,:] is the Z-physical-error-to-logical-observable map

E.g. for k=1, n=10, then if O[2,5] is true, then the logical Z observable is flipped by a X₅ error; and if O[1,12] is true, then the logical X observable is flipped by a Z₂ error.

Of note is that there is a lot of freedom in choosing the logical operations! A logical operator multiplied by a stabilizer operator is still a logical operator. Similarly there is a different fault matrix for each choice of logical operators. But once the logical operators are picked, the fault matrix is fixed.

Below we show an example that uses the Shor code. While it is not the smallest code, it is a convenient choice to showcase the importance of the fault matrix when dealing with degenerate codes where a correction operation and an error do not need to be the same.

First, consider a single-qubit error, potential correction operations, and their effect on the Shor code:

julia> using QuantumClifford.ECC: faults_matrix, Shor9
++ __ZZZ_Z_
source
QuantumClifford.ECC.evaluate_decoderMethod

Evaluate the performance of an error-correcting circuit.

This method requires you give the circuit that performs both syndrome measurements and (probably noiseless) logical state measurements. The faults matrix that translates an error vector into corresponding logical errors is necessary as well.

This is a relatively barebones method that assumes the user prepares necessary circuits, etc. It is a method that is used internally by more user-frienly methods providing automatic conversion of codes and noise models to the necessary noisy circuits.

source
QuantumClifford.ECC.faults_matrixMethod

Error-to-logical-observable map (a.k.a. fault matrix) of a code.

For a code with n physical qubits and k logical qubits this function returns a 2k × 2n binary matrix O such that O[i,j] is true if the logical observable of index i is flipped by the single physical qubit error of index j. Indexing is such that:

  • O[1:k,:] is the error-to-logical-X-observable map (logical X observable, i.e. triggered by logical Z errors)
  • O[k+1:2k,:] is the error-to-logical-Z-observable map
  • O[:,1:n] is the X-physical-error-to-logical-observable map
  • O[n+1:2n,:] is the Z-physical-error-to-logical-observable map

E.g. for k=1, n=10, then if O[2,5] is true, then the logical Z observable is flipped by a X₅ error; and if O[1,12] is true, then the logical X observable is flipped by a Z₂ error.

Of note is that there is a lot of freedom in choosing the logical operations! A logical operator multiplied by a stabilizer operator is still a logical operator. Similarly there is a different fault matrix for each choice of logical operators. But once the logical operators are picked, the fault matrix is fixed.

Below we show an example that uses the Shor code. While it is not the smallest code, it is a convenient choice to showcase the importance of the fault matrix when dealing with degenerate codes where a correction operation and an error do not need to be the same.

First, consider a single-qubit error, potential correction operations, and their effect on the Shor code:

julia> using QuantumClifford.ECC: faults_matrix, Shor9
 
 julia> state = MixedDestabilizer(Shor9())
 𝒟ℯ𝓈𝓉𝒶𝒷━━━━━
@@ -146,7 +146,7 @@
 julia> O * stab_to_gf2(bad_Z₆Z₉)
 2-element Vector{Int64}:
  1
- 0

While its use in this situation is rather contrived, the fault matrix is incredibly useful when running large scale simulations in which we want a separate fast error sampling process, (e.g. with Pauli frames) and a syndrome decoding process, without coupling between them. We just gather all our syndrome measurement and logical observables from the Pauli frame simulations, and then use them with the fault matrix in the syndrome decoding simulation.

source
QuantumClifford.ECC.isdegenerateFunction

Check if the code is degenerate with respect to a given set of error or with respect to all "up to d physical-qubit" errors (defaulting to d=1).

julia> using QuantumClifford.ECC
+ 0

While its use in this situation is rather contrived, the fault matrix is incredibly useful when running large scale simulations in which we want a separate fast error sampling process, (e.g. with Pauli frames) and a syndrome decoding process, without coupling between them. We just gather all our syndrome measurement and logical observables from the Pauli frame simulations, and then use them with the fault matrix in the syndrome decoding simulation.

source
QuantumClifford.ECC.isdegenerateFunction

Check if the code is degenerate with respect to a given set of error or with respect to all "up to d physical-qubit" errors (defaulting to d=1).

julia> using QuantumClifford.ECC
 
 julia> isdegenerate(Shor9(), [single_z(9,1), single_z(9,2)])
 true
@@ -158,4 +158,4 @@
 false
 
 julia> isdegenerate(Steane7(), 2)
-true
source
QuantumClifford.ECC.naive_encoding_circuitMethod

Encoding physical qubits into a larger logical code.

The initial physical qubits to be encoded have to be at indices n-k+1:n.

Encoding circuits are not fault-tolerant

Encoding circuits are not fault-tolerant, and thus should not be used in practice. Instead, you should measure the stabilizers of the code and the logical observables, thus projecting into the code space (which can be fault-tolerant).

The canonicalization operation performed on the code may permute the qubits (see canonicalize_gott!). That permutation is corrected for with SWAP gates by default (controlled by the undoperm keyword argument).

Based on (Cleve and Gottesman, 1997) and (Gottesman, 1997), however it seems the published algorithm has some errors. Consult the erratum, as well as the more recent (Grassl, 2002) and (Grassl, 2011), and be aware that this implementation also uses H instead of Z gates.

source
QuantumClifford.ECC.naive_syndrome_circuitFunction

Generate the non-fault-tolerant stabilizer measurement cicuit for a given code instance or parity check tableau.

Use the ancillary_index and bit_index arguments to offset where the corresponding part the circuit starts.

Returns the circuit, the number of ancillary qubits that were added, and a list of bit indices that will store the measurement results.

See also: shor_syndrome_circuit

source
QuantumClifford.ECC.shor_syndrome_circuitFunction

Generate the Shor fault-tolerant stabilizer measurement cicuit for a given code instance or parity check tableau.

Use the ancillary_index and bit_index arguments to offset where the corresponding part the circuit starts. Ancillary qubits

Returns:

  • The ancillary cat state preparation circuit.
  • The Shor syndrome measurement circuit.
  • The number of ancillary qubits that were added.
  • The list of bit indices that store the final measurement results.

See also: naive_syndrome_circuit

source
+truesource
QuantumClifford.ECC.naive_encoding_circuitMethod

Encoding physical qubits into a larger logical code.

The initial physical qubits to be encoded have to be at indices n-k+1:n.

Encoding circuits are not fault-tolerant

Encoding circuits are not fault-tolerant, and thus should not be used in practice. Instead, you should measure the stabilizers of the code and the logical observables, thus projecting into the code space (which can be fault-tolerant).

The canonicalization operation performed on the code may permute the qubits (see canonicalize_gott!). That permutation is corrected for with SWAP gates by default (controlled by the undoperm keyword argument).

Based on (Cleve and Gottesman, 1997) and (Gottesman, 1997), however it seems the published algorithm has some errors. Consult the erratum, as well as the more recent (Grassl, 2002) and (Grassl, 2011), and be aware that this implementation also uses H instead of Z gates.

source
QuantumClifford.ECC.naive_syndrome_circuitFunction

Generate the non-fault-tolerant stabilizer measurement cicuit for a given code instance or parity check tableau.

Use the ancillary_index and bit_index arguments to offset where the corresponding part the circuit starts.

Returns the circuit, the number of ancillary qubits that were added, and a list of bit indices that will store the measurement results.

See also: shor_syndrome_circuit

source
QuantumClifford.ECC.parity_checksFunction

Parity check tableau of a code.

See also: parity_checks_x and parity_checks_z

source
QuantumClifford.ECC.parity_checks_xMethod

Parity check boolean matrix of a code (only the X entries in the tableau, i.e. the checks for Z errors).

Only CSS codes have this method.

See also: parity_checks

source
QuantumClifford.ECC.parity_checks_zMethod

Parity check boolean matrix of a code (only the Z entries in the tableau, i.e. the checks for X errors).

Only CSS codes have this method.

See also: parity_checks

source
QuantumClifford.ECC.random_all_to_all_circuit_codeFunction

Random all-to-all Clifford circuit code (Brown and Fawzi, Jul 2013).

The code of n qubits is generated by an all-to-all random Clifford circuit of ngates gates that encodes a subset of qubits encode_qubits into logical qubits.

Because of the random picking, the size of encode_qubits is the only thing that matters for the code, referred to as k.

See also: random_all_to_all_clifford_circuit, CircuitCode

source
QuantumClifford.ECC.random_brickwork_circuit_codeFunction

Random brickwork Clifford circuit code (Brown and Fawzi, Jul 2013).

The code is generated by a brickwork random Clifford circuit of nlayers layers that encodes a subset of qubits encode_qubits into logical qubits.

See also: random_brickwork_clifford_circuit, CircuitCode

source
QuantumClifford.ECC.rateMethod

The rate of a code.

source
QuantumClifford.ECC.shor_syndrome_circuitFunction

Generate the Shor fault-tolerant stabilizer measurement cicuit for a given code instance or parity check tableau.

Use the ancillary_index and bit_index arguments to offset where the corresponding part the circuit starts. Ancillary qubits

Returns:

  • The ancillary cat state preparation circuit.
  • The Shor syndrome measurement circuit.
  • The number of ancillary qubits that were added.
  • The list of bit indices that store the final measurement results.

See also: naive_syndrome_circuit

source
diff --git a/dev/ECC_evaluating/42065b1a.png b/dev/ECC_evaluating/42065b1a.png new file mode 100644 index 0000000000000000000000000000000000000000..60e59de45b0390644cb930b5933d2a1fb2c6e617 GIT binary patch literal 56075 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 literal 0 HcmV?d00001 diff --git a/dev/ECC_evaluating/505c611f.png b/dev/ECC_evaluating/505c611f.png new file mode 100644 index 0000000000000000000000000000000000000000..755151b1ce52ee5ec7d61535bbd605ddd259ce13 GIT binary patch literal 42811 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 Bv&;Yh literal 0 HcmV?d00001 diff --git a/dev/ECC_evaluating/a18880eb.png b/dev/ECC_evaluating/a18880eb.png deleted file mode 100644 index 5a1850df46f3dfd672a5009d58357a45cc519ffc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43125 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 A)c^nh diff --git a/dev/ECC_evaluating/index.html b/dev/ECC_evaluating/index.html index d6757eb3d..801f23f89 100644 --- a/dev/ECC_evaluating/index.html +++ b/dev/ECC_evaluating/index.html @@ -38,7 +38,7 @@ end end -make_decoder_figure(mem_errors, results, "Shor's code with a lookup table decoder")Example block output

Testing out the toric code with a decoder provided by the python package pymatching (provided in julia by the meta package PyQDecoders.jl).

import PyQDecoders
+make_decoder_figure(mem_errors, results, "Shor's code with a lookup table decoder")
Example block output

Testing out the toric code with a decoder provided by the python package pymatching (provided in julia by the meta package PyQDecoders.jl).

import PyQDecoders
 
 mem_errors = 0.001:0.005:0.1
 codes = [Toric(4,4), Toric(6,6)]
@@ -53,4 +53,4 @@
     end
 end
 
-make_decoder_figure(mem_errors, results, "Toric code with a MWPM decoder")
Example block output +make_decoder_figure(mem_errors, results, "Toric code with a MWPM decoder")Example block output diff --git a/dev/allops/index.html b/dev/allops/index.html index 096bddea3..4add65f8d 100644 --- a/dev/allops/index.html +++ b/dev/allops/index.html @@ -10,4 +10,4 @@ noise = UnbiasedUncorrelatedNoise(ε) noisy_gate = NoisyGate(SparseGate(tCNOT, [2,4]), noise)Example block output

In circuit diagrams the noise is not depicted, but after each application of the gate defined in noisy_gate, a noise operator will also be applied. The example above is of Pauli Depolarization implemented by UnbiasedUncorrelatedNoise.

One can also apply only the noise operator by using NoiseOp which acts only on specified qubits. Or alternatively, one can use NoiseOpAll in order to apply noise to all qubits.

[NoiseOp(noise, [4,5]), NoiseOpAll(noise)]
Example block output

The machinery behind noise processes and different types of noise is detailed in the section on noise

Coincidence Measurements

Global parity measurements involving single-qubit projections and classical communication are implemented with BellMeasurement. One needs to specify the axes of measurement and the qubits being measured. If the parity is trivial, the circuit continues, if the parity is non-trivial, the circuit ends and reports a detected failure. This operator is frequently used in the simulation of entanglement purification.

BellMeasurement([sMX(1), sMY(3), sMZ(4)])
Example block output

There is also NoisyBellMeasurement that takes the bit-flip probability of a single-qubit measurement as a third argument.

Stabilizer Measurements

A measurement over one or more qubits can also be performed, e.g., a direct stabilizer measurement on multiple qubits without the use of ancillary qubits. When applied to multiple qubits, this differs from BellMeasurement as it performs a single projection, unlike BellMeasurement which performs a separate projection for every single qubit involved. This measurement is implemented in PauliMeasurement which requires a Pauli operator on which to project and the index of the classical bit in which to store the result. Alternatively, there are sMX, sMZ, sMY if you are measuring a single qubit.

[PauliMeasurement(P"XYZ", 1), sMZ(2, 2)]
Example block output

Reset Operations

The Reset operations lets you trace out the specified qubits and set their state to a specific tableau.

new_state = random_stabilizer(3)
 qubit_indices = [1,2,3]
-Reset(new_state, qubit_indices)
Example block output

It can be done anywhere in a circuit, not just at the beginning.

+Reset(new_state, qubit_indices)Example block output

It can be done anywhere in a circuit, not just at the beginning.

diff --git a/dev/canonicalization/23f10a97.png b/dev/canonicalization/23f10a97.png deleted file mode 100644 index e1a7f4585a6511e1b066f755c27fdcd6cf43144b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9772 zcmeI2Ygkj)n#a?jic_oDLt9jCc5JohV2jmagg|1&mbMDC)etp8w2EoD1q$JsOSP?@ z76GjlM!BTcw#Y_^HwcDY6a++Wr4SH8vVmX%gd~KJ`)$?^&WH2#nK|c~&h*h|4txmg zu*q8gwchvrz5lhp{vax1*)yx3L7`B~-g|e)M<~?OS5YXpFPHoaxPtW{)qt19AMcFV zfpQ|>-}5WaqEKs4@9lVNPj;C~!n`8QiZyDDLs825{Rckex$oK_+~SiF-x2jutaijF zD6ye;9a=AF+c)@J?nckoo*(?#4c)eV6H&bA%gafL7-Hjzi(kFzmbrazXHtT%RfD4m)|)_M~3^yuT_oGhuH zzIk}s8#c8j#_2AsXVK=4FMZwAD6}?~@Mq#-YcHE=SC$<3ti3N9XTJ`v<&$jVKfIk^ zA^SAC2?-gLoBjtc{^Z@fFJPM-9c>f+qN$7TD6V8NxDeJh=D`^_=!%v*d1A42%NuWe zh-cX*)>l?m3azknF3|ZIETH4{0m8X}Y64r0ePKG5qcfhO z_Et<_jdux_R_0h6sTVD+(cj;rYnj5@I*Ob}ln$N&8aiod74l|<#)7Q8mTJaLs!(t3 zKkmi1*$5;Fr>CkxS=(6r8quJlFs-qg+`+X)p>u0-b8CA-b)6@cdCTSU7hl^yf2N3b z1Vz60OcSC7%V}nvq(3v7bZu7cZD}Q=eN|u_Qu>69F6%p-Xl-q*i#wkn*eW^6D%&^2 z#jzuODYQD>p-(TuWtFe-;S%`Mc#bqzNpTt|ILqWEF^3|2SWL{+ zNbO$*(k?<$r^D#1WbS?NasZNKy1z>n*OyORBGxCFk1Z`lQydT4u!ehUi$>Dgd?^fF zDQpxN@uG(%BnQcP=#VF}*HS}L1ZMeJ+Wem5sdtVq%7W=e5rJf{q0p7fDA~2HDgn29BP(*h!y5A$#xcR2;N;KVw!zAuTk^dEW4Sk>xVdjjHtf58C)X${KV<#s6vM4GNiYL+QlQ*fvY6 zk>p5)v+*L6yj8o_y1K1;9XZBOz$OZBQg|0ArO<^qVLgQ=qB-vSg$Vc*9(1&AHJhe9 zSLN_3o9fQ*OCEn$Q5~<3Gl!qVP^`WMVtieC`yGKcz>7aWETGCgG=E=}$E=WE?geFj zvM#l4ZoppEt)(80z$o&lB=b;YBGE{!0n$*Jn%cv3*~vnR#+xl?&veJSTU)E45H`)2 ze4{qkNF;f#Yej>|#AGxWgGC97Z{>>T=XJ{;cVPIRJoR~;r>vA{tZW;oS9A7L zkC0%~{Lh!@GJIXu;5C7ksw^=S5OibJX4?&s^;~Sj;T+h+m5ZL5LpC}nhbJpv@572S=KII@H8He#HoNY|r*F_rQHx}v(qQUIZ z-S6!>MM;scW_Za^0#jkGY|ABeE!PYB*)w2EVaT~j;3j-c$aOZw#uUtb<3X|st%mb~ z3;6bU^5$>0&jJu582T>y4Z$rclS}0%WcKy8>SNnLs)_L(8bmWDXAJ^vf*^glK9YbJ zIXe7PBow|$)iZRhjxMV)(t_aNvzr4jibSxs1NIBS4>j$Mt?swqU2N0Ara=FQ%PkIcZ5*OM*v)fYTS_>;@oYHtnW&UuwBrf&M4K%j-7 z+y)BQy6B?5bY`hT&xQDOYp0j=rQb*QmzuF4+_s%|_ot=yRD@NUMu{o69#YwPvG5^e za<@lmQ#(mqr^6bpy|a7wZdXyw87DL37M(Fvrsj!>2~g4{xhrvd7K6H+l-3hw9Ldx0@%rIGfkEA<`>xK; zk!)E3zV4IWAEIgFo`7Hc?!V!BZ(EqYe>WwkgDB9~Q1Bukar#hv$ui~3E;304teDa; zb|R2z?!eapjXB`Y!b2Y|8NfE*(Cn)a!$4*lx-l9b^L9|F~%$^l4Dx%IHvlgW4( zK*~|pa4KwClMed$lGf4r?Cd;DvssmQritDsvA_SSHH~MUwFXjb_iMeCw5Ax} z;cGk!?PDIL5lZ;%XuQ(V{Yrs#cN@W2KoBJbNrP(wTST_wefE!-m#O71<=j~sw-M_I z=lx*68*SSGA9Cf_XFKCdVhz89dn~g)?_~M^#qF_e^pQpU8z%y(hojH#1+`e|0L8k- zs@tz=@rOsYN|S(!N(Vr{)otX}ZSDu14?R4rOUP9N;-4Wy7LrN;{t-l6{Z68>QHZab z7NqY-%5?)a9cY}8xm(8hmMNTV5~RtWd!o<|sX|-b0G4so(VW_z^c$sxhJt8y$N(tR zK?4nZfP1Za$lk@FFVKpH-I~8StiB!~FH)xvTnWH5e##)3!^>q7*nK^aud6#NK5;$@((eC=?3zc2mzsODl+w|T^a+EYy#q>7v-6a; ziO&12`fIH!D5O6xEthTMZ2>w_nf2*RE`i7$GxSF-ay5dWt$L&p3KHAS)d214iJ*@P z=?|9D9}-C`hS|0;RgJaAOK2UxDfnImI%%M*av)IU%^L1Ce{=xcR`ayWpF>^yO<+H6 z7Ncu`2+4eYqov8W1GEWf-((4S?@@X@s|8wX-EUl9;xpsT3K4KAJPRpxfGRCkCLn0r zRam3)h8vZD}hMGO9L{ zo~W>Lb=tt|9^z7!u&oQ;BN9su_4w+TFmdy8pRKc%OiLwRpD#4!14xQI`P`Q_+(NTO z9L%Wzy%v16DAlsuS1PrwT5WXsF+dnhF-NVDP_IyhNSd~`f-Iy4f_=TV0DgbDuZA8K z>6=onv17%KbE;6=#4b1!uj70hPVWn4^QR&yTvfdoFottH&@qmfGr+x=Bl+t*oUhp$b>Xc6U)oi0w}cTl|n-u+ulmCy@Th2pZKyu%;NOLu95rT z?0q=;IOqLP;B67&avsWxaDsz(j^oT{alsm%ZgDzFh!lX)j51Ti=RHR|ieIbTbe& z$u1&=xvj^&6Dux-R*|GHQRlnfW3*>niz*Z0aNJ7Fi z%Q4034px*QkzOt|!lf{_c&4M5!PXVmnnOoCPH8h>Y zP-GoFdKApYHS4E~!VC}cq`C?yR}bVr=0O`BN$-*H^NhzAEk(e!Hr5Itn~Wm6j!3>R zbZ+h$No`&R+|>Dd_wK1BjXlUp@2^i9%7d*^D0kvaL<(O&@RU!ui^YcveKA<4xrZPE z7G+HB0kg!(=y;8@fmnY9QuB1(o*tjLjwBXOH&Rf7@fX+)U`YhV@TD(qcmM`*OHpB! za8?kbT|B**47_BElFceF_g%GW=vKM{IJu5Kw_5HrRGPxAg8YDeUEqzb_j||n;oV?| zXU7Y;%1XRbnF&VUY@L{uB^-@x*w3pkqXV&H76b&oW)@pF4R`E?Y=w=a9|% zKXUz$qHSA&_z!3-@E_oamgh$ZWTS&6St2CiBd}Q~V zg&Lu43?NUHZ?&}*DNz^vh+;HW9E@EOVbCXMG2=a`pgtYAejOmtIx>=fg5csVcIyYO z?(wfr$l1_>JT5yf+8C+hZD|A=nLw?2RJRM1<9TRuC6)oNGWGfyo+GA-Hugt4aG*?m01hcwvZm|9neRkx%J^UKIBx6i-!;hx z>{A2Ot=3&dHNJ-DqG0Ly!!=fGAhRKjPLO4SaAMT?0HX$*_M>&SfMW;HV`+82ieuL~ zqMI%@i@~W$m$JE8_j%S6cb1Acn;Sp4#L9u2oarPO=_Kj0)XWRzJ&&fjJ~19P(a^zt zd1*0t8Nu+&m^s8?xVn9U1VOWi<;Kc_Eryt|svF z#ApFz(1XMRHU`m{C_e}rx?c$ZnP~c#F%eznDMK<1=b`IlraB>)E*qUaN(Pf=$*Mi3H z+yDK=9ksXFv{88@0)g0c=%Ce)2*lca1VZNL4Qs%EEabg%!OQxSwl-D>3H1AG)x#SI z#CF6XtM8m5)4A`0PqT1U65hf{VZKX*9CDpR&B08(Ey(YF;ePq6m)7}wx7@8VfBuD% zPuw@p{lh=YEi6ljD>10M8=2VtAk4hLsQB=$^6keJbvKM|(DAF7&!mSW(kl<5G-SQ1U1{xjB3!t>#8BA+wlHR|ikl!H>_92e13}*6sj*fB5GY z2*j^nf42dFIC^vYS_I(9PNAkN?WKfJuNQvjX@Ve+8U zUz?hnm#0HTKU0Grs&5B)WdGZ&=mq1ws-;{>X8MEBsnut|UtY~}vIU}%FsMc-%1Yd; z_L6*s)J?hgB)hIR(Z?=x);)6Z+Eg{NTLbxUgPKScWnuwPfSi?mp0^QmszeNk3XVj$?xaGhWR_>o`Q@yLhR}g?q}7mZ%ffU8HqQ+ z`kxK|20JlR;_c#yEHL^e1>JcEcgTw6qk(KKx>l^8W|%Ark3Z_gJ=bfpHe$)Ah1-Hc4e9{HUYfXv~ zT#!{47A08-2V!Y`XKbx1$E;E1<5_72g0G}kQ~2o|Gkow2t$KxfL!vKm;C2^r3hLFb zk{qHZ9NkI+x?65+fRckffn(ZlY-Xm4gltn(RFuptV1%{uqa2PF+b;NAd!m}D!IBdE zt$(BS$B3*IJ+>gH3H>5<;xdmE$&S;B;P!yDN%v_;aUd?Ws~N>Y8S-?Et=CeUN>J$z z&8doMx{R!x6{9v*mMFNdVa>2Jd?&c4SoKK8cZL8hMAHlLipYWAYEGD6?z}iYK8}hW zx2;doki4z8n15kN=hbP5L#zUNOSmYB_uzWiHNM`{tg45LW4G51UR3lHmNiFDz22R- z{BAmCfy}HN1-4>~UBLqroSiQpwu7==dV<~|dbPi3o(rz2!0>N3n=Llon?A>^0B($# zD)K!jy((HXpZPv&c}PPt;at7cVkti-5S$96>OibrOz+07{!)hSQp33G_?luYjmMmMoBX6f|`fPHS|_% z>T+fFs~e_;S(j4vycVBdC}5xw!nDez&OG|qy{n$fY(<=qzY)6SrIpEQF;**siP^Sp zHPj?1L)GAYLQm`o4LpUn2-US+I6`FioMLxPeBae3v{xD-=~jHQG}r?W0u+4S^GrlCWBnK zz}PjNqPq_{?gr(h0hAY{AIjN^;oc)P+jKfPiFBOO?B09xC&HJ7Suct%Ax^}uy7Gc> z@Qb=<7>L~&_z!1-zczMa45~07-2%tOH|1sq2HLv0sw&y`UNM3)F|={f;b+J9gSYpL zdgR14?_-|+`%iY^oM_BW@lC|}>S4JZp9r6zy$2F@%MUknaOp$OF5Cc}YBiZuV+#nvXZjrDZTVxbqM*%cTM zs*pY{1-%tHq)_GJ$UP{Ec~5y&c}#(L6cG{=a(UH(BD^qn@?jV-Z_fY^UKi(v-|R&t z838*=BUou%mzQK^k4D!kq+3v2?&1|{B-BaBp=;;?0yT7;2&>0jm74?V@k|70e; zsF^vYS3i?U3%v|i;XC{rfL*8+Qzmt?4)*qNS>iKxd-AT(sZHU=t~nh4*c_2YT4*3OnhRZCw?SZ<(v{+W%FI4#Qcovp+r+n_G|-6(#Nr& zwPx5u^*LZ8W~ns^FvnJ8s{5H&zi8P2m?><{_yKxTfBF|2_3pAT&QKCY9f|7;tVe#*vux`C@=Vm=l^pIKBPi`9{NjRV2WTu<7ziz;sPMWC(bSQ~txn)3W-2qaUr;6gL$m9K5V`65JsV--!LT zY0mHq2s?d;`XojDBGv+ZWMqW&7T6;Tm@M9MC9pF4?;xSd$f=o}6>(`c3}D{5nSt5^ zO#^Z}^Z{Ui7GNLt>wD(K*A2gv#;*eC1@_%2abnypD+av~K6Pbm;sl73v#2>8s?RpA z%RzVBsKg??tZ5||il04l!z;fc-X6@!$zggD09 z(-MnC&f;RVm__KN1uH@e#)+*KRaC1eE1U4^F{18fR%zYOkW!rYWG7`q=;%JcVk}PT!^WtdznOP0b#>qSF3#A1`K~SfF^EGcJQL{?Lmi z_<&v%7|V7|X;lhX+VIc-f5xV(BcS(>54b-&UfzGqo-2TQ8~;Ob2n8uK{5cWoe!SeL28k_HOxWtE=7=cQKi17BZVm zL)ljCHYdW2^=VxKq&*i%2zDBS9S59ci?UwmoGZ#Ykir3W%ozu{#-U=M1(EvqL5zZ~ z94JP$m!z6Wz~0EL#`o`cmp)M;FF_m{>7T?b+QZTLrti> zZVe>oyCbWL=%sok#7c;!FqnSeeiLR`xamZ9N`VmMB>;K~c$9d5&yS$@f*TmnksW;C zaU!n22j0raed>PLxKt~sE!em{byc|(3e_5X5Zt=#4a_EFV*+WRvcQ`G5u3b*UV)u2g!#)AKf9O(5=`UaD)|TqF9H2@bIqyJp~PUKsFyh3ii+V~1v(VYs&a)J+z$}s62%Ha ztg{{K6x~BOcW|Cjyyr+B6<0NBSiRV&VIlC6%z44M$JP)JYFMm{I|K_3!6rPcS{_05 zR}+a=W-~Q1fRk40`l~tS(|ABXZn<5G^qGs*5>a*km^Z9Rt*>0Dny#97oTJI^7jygR zl9g#21^_*f)?pQ_pB3NS-Ws2}i?j(z&+r41nmK#GE!IVc}#Thucgt*zk9 z4f%N&&k4B?g5+XjR2)gkL+uS279n==uAi^&U^1BkzQqx=NQ>R) zJ;A|97Q1rYi2Stv%J)7f({qBctaAD9J49GaXZJsQ3>Aq~mAr zys(rv*Ee4wN|K_ZqgTjSs*9`ZxfgmSf(#Mlh??%VG~mmmBlh-UaLbq%dK6w4jXrnP zYnff(T`#9rTiw-yi)cRlJKRCMPYe)&utm0 ztNMtN6%ApHtR~wBMd;QAYGmy?MOCxNnP;D)0%*P7-rh+VainY$Y={Xr4nT3eDU0{k zJE_<;H&#|2-bDrBlU?%BW0uI!Wg!n}hIeJ^VGh1ypr^-QnI>X10q>)YjD(k~tHn!` zw4irj4+FXMhWy*3QoU0gA~TaA9?!6tFGyM$zr43{<{9+mA+_s>r58)@>PVZF_8=PI zcN(pidn^ZSYFYs#OAMg~I5ZRlh&2N!z|~-LZZelfMY>9GWvGvjwkEY|z9)xTK5;Xt zY;iOV;C!kLqpzDF##$7Ivw};?Gwf0Y;7d6$UHUJN;yU0@V!#&9)kzl#>CqBiSQBau;$r>fax`ElC2?7!h z5T%+SIPEzN?1M~8-pzZg)U3RQQnI=<4QzCD)wo_uzJiXue)QVNb1E*BU;xwKl$+ct zg@~HnGulCM^#lLPH_oHFgZd1Jb2GD070AY=zj?0MZ*Fc59lh2d^;phUB+96iql$~c zH;PF{@+ViToLbY)g8HP657RjpTO{&^t)C+|JNap@(>uMD4&3T=?I3V{Z9dx@w zdUgA0@Vz(K@bUdUP7JUVg;@sU4eQQc`#755AgSEnMODeP{$g$cX5_1cPf_}VX@;6|549uiDv$=$&;|%i>fG?i-hwCD?pI|XFdu)AmzOuL zm0$MMHJ4-*vn({83V2tJ)@+Ksb>N zdr+x?$-Z`KtcX3>U79cM8-hxWANDZ@hXdlEvjE2GjmlR@B-rb94Spywdw)-7v0r$z zK!*w>+s(}L?WtJdJe3Kw+50Y*-8&toUXuOmK|?*oEHFo>l%{C&AoauJr7PTLDZ5ab z!OZ^og{OJm3rBir^MiNCf!IkZdz$GGRfr1weAaCCr55g8xU*H|RCrzm07PZ8xQ~ZB zgts3?!C(Xj@HIVQMYNDHdLImW$KM`m`WNYL9fU~uNxxsB9_mQB3t&3g;#t{j*0+F& z{>%{%=}pdd0JRK^j<+D22`oO@JWfj4wx}wBREt82UwsX9JeNPnHjlw1l_l7A`fZ$o z4%uQ&em5K*@Zp6Kut)-umI>>K%gsNKRb;J zjhUVP)(qZIeRHVqWLNI$>%^t!W+25IL0SK$?2EP%aE<|lOM3~N2p<1tr>15w7u0 literal 0 HcmV?d00001 diff --git a/dev/canonicalization/59f18518.png b/dev/canonicalization/59f18518.png deleted file mode 100644 index b5837a7f4ee35401048f5263b2b3ffc0a07470a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9933 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 diff --git a/dev/canonicalization/71416456.png b/dev/canonicalization/71416456.png new file mode 100644 index 0000000000000000000000000000000000000000..26692170ce4bc504e34d8cc803a5b202ac672c68 GIT binary patch literal 9474 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 literal 0 HcmV?d00001 diff --git a/dev/canonicalization/928a7be8.png b/dev/canonicalization/928a7be8.png deleted file mode 100644 index bd5475623c6ab01a8faaad368a872b42831a72ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9619 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 myhrl}4Z)UAxQ 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 TE#ZSZf_=IzbZgDW`%e5P82EaW literal 0 HcmV?d00001 diff --git a/dev/canonicalization/ea199665.png b/dev/canonicalization/ea199665.png deleted file mode 100644 index a7f57d30ba5fd0a37db6988e9c7ca7a6e42bd1ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9447 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 · QuantumClifford.jl

Canonicalization operations

Different types of canonicalization operations are implemented. All of them are types of Gaussian elimination.

canonicalize!

First do elimination on all X components and only then perform elimination on the Z components. Based on (Garcia et al., 2012). It is used in logdot for inner products of stabilizer states.

The final tableaux, if square should look like the following

If the tableaux is shorter than a square, the diagonals might not reach all the way to the right.

using QuantumClifford, CairoMakie
 f=Figure()
 stabilizerplot_axis(f[1,1], canonicalize!(random_stabilizer(20,30)))
-f
Example block output

canonicalize_rref!

Cycle between elimination on X and Z for each qubit. Particularly useful for tracing out qubits. Based on (Audenaert and Plenio, 2005). For convenience reasons, the canonicalization starts from the bottom row, and you can specify as a second argument which columns to be canonicalized (useful for tracing out arbitrary qubits, e.g., in traceout!).

The tableau canonicalization is done in recursive steps, each one of which results in something akin to one of these three options

using QuantumClifford, CairoMakie
+f
Example block output

canonicalize_rref!

Cycle between elimination on X and Z for each qubit. Particularly useful for tracing out qubits. Based on (Audenaert and Plenio, 2005). For convenience reasons, the canonicalization starts from the bottom row, and you can specify as a second argument which columns to be canonicalized (useful for tracing out arbitrary qubits, e.g., in traceout!).

The tableau canonicalization is done in recursive steps, each one of which results in something akin to one of these three options

using QuantumClifford, CairoMakie
 f=Figure()
 stabilizerplot_axis(f[1,1], canonicalize_rref!(random_stabilizer(20,30),1:30)[1])
-f
Example block output

canonicalize_gott!

First do elimination on all X components and only then perform elimination on the Z components, but without touching the qubits that were eliminated during the X pass. Unlike other canonicalization operations, qubit columns are reordered, providing for a straight diagonal in each block. Particularly useful as certain blocks of the new created matrix are related to logical operations of the corresponding code, e.g. computing the logical X and Z operators of a MixedDestabilizer. Based on (Gottesman, 1997).

A canonicalized tableau would look like the following (the right-most block does not exist for square tableaux).

using QuantumClifford, CairoMakie
+f
Example block output

canonicalize_gott!

First do elimination on all X components and only then perform elimination on the Z components, but without touching the qubits that were eliminated during the X pass. Unlike other canonicalization operations, qubit columns are reordered, providing for a straight diagonal in each block. Particularly useful as certain blocks of the new created matrix are related to logical operations of the corresponding code, e.g. computing the logical X and Z operators of a MixedDestabilizer. Based on (Gottesman, 1997).

A canonicalized tableau would look like the following (the right-most block does not exist for square tableaux).

using QuantumClifford, CairoMakie
 f=Figure()
 stabilizerplot_axis(f[1,1], canonicalize_gott!(random_stabilizer(30))[1])
-f
Example block output

canonicalize_clip!

Convert to the "clipped" gauge of a stabilizer state resulting in a "river" of non-identity operators around the diagonal.

using QuantumClifford, CairoMakie
+f
Example block output

canonicalize_clip!

Convert to the "clipped" gauge of a stabilizer state resulting in a "river" of non-identity operators around the diagonal.

using QuantumClifford, CairoMakie
 f=Figure()
 stabilizerplot_axis(f[1,1], canonicalize_clip!(random_stabilizer(30)))
-f
Example block output

The properties of the clipped gauge are:

  1. Each qubit is the left/right "endpoint" of exactly two stabilizer rows.
  2. For the same qubit the two endpoints are always different Pauli operators.

This canonicalization is used to derive the bigram a stabilizer state, which is also related to entanglement entropy in the state.

Introduced in (Nahum et al., 2017), with a more detailed explanation of the algorithm in Appendix A of (Li et al., 2019).

+fExample block output

The properties of the clipped gauge are:

  1. Each qubit is the left/right "endpoint" of exactly two stabilizer rows.
  2. For the same qubit the two endpoints are always different Pauli operators.

This canonicalization is used to derive the bigram a stabilizer state, which is also related to entanglement entropy in the state.

Introduced in (Nahum et al., 2017), with a more detailed explanation of the algorithm in Appendix A of (Li et al., 2019).

diff --git a/dev/commonstates/index.html b/dev/commonstates/index.html index 0a6da1cc7..261bc497a 100644 --- a/dev/commonstates/index.html +++ b/dev/commonstates/index.html @@ -72,4 +72,4 @@ + XXXX + ZZ__ + _ZZ_ -+ __ZZ ++ __ZZ diff --git a/dev/datastructures/index.html b/dev/datastructures/index.html index 12238e83a..a50ebd799 100644 --- a/dev/datastructures/index.html +++ b/dev/datastructures/index.html @@ -1,2 +1,2 @@ -Datastructure Choice · QuantumClifford.jl

Data Structures Options

Choosing Appropriate Tableau Data Structure

There are four different data structures used to represent stabilizer states. If you will never need projective measurements you probably would want to use Stabilizer. If you require projective measurements, but only on pure states, Destabilizer should be the appropriate data structure. If mixed stabilizer states are involved, MixedStabilizer would be necessary.

Stabilizer is simply a list of Pauli operators in a tableau form. As a data structure it does not enforce the requirements for a pure stabilizer state (the rows of the tableau do not necessarily commute, nor are they forced to be Hermitian; the tableau might be underdetermined, redundant, or contradictory). It is up to the user to ensure that the initial values in the tableau are meaningful and consistent.

canonicalize!, project!, and generate! can accept an under determined (mixed state) Stabilizer instance and operate correctly. canonicalize! can also accept a redundant Stabilizer (i.e. not all rows are independent), leaving as many identity rows at the bottom of the canonicalized tableau as the number of redundant stabilizers in the initial tableau.

canonicalize! takes $\mathcal{O}(n^3)$ steps. generate! expects a canonicalized input and then takes $\mathcal{O}(n^2)$ steps. project! takes $\mathcal{O}(n^3)$ for projecting on commuting operators due to the need to call canonicalize! and generate!. If the projections is on an anticommuting operator (or if keep_result=false) then it takes $\mathcal{O}(n^2)$ steps.

MixedStabilizer provides explicit tracking of the rank of the mixed state and works properly when the projection is on a commuting operator not in the stabilizer (see table below for details). Otherwise it has the same performance as Stabilizer.

The canonicalization can be made unnecessary if we track the destabilizer generators. There are two data structures capable of that.

Destabilizer stores both the destabilizer and stabilizer states. project! called on it never requires a stabilizer canonicalization, hence it runs in $\mathcal{O}(n^2)$. However, project! will raise an exception if you try to project on a commuting state that is not in the stabilizer as that would be an expensive $\mathcal{O}(n^3)$ operation.

MixedDestabilizer tracks both the destabilizer operators and the logical operators in addition to the stabilizer generators. It does not require canonicalization for measurements and its project! operations always takes $\mathcal{O}(n^2)$.

For the operation _, anticom_index, result = project!(...) we have the following behavior:

projectionStabilizerMixedStabilizerDestabilizerMixedDestabilizer
on anticommuting operator anticom_index>0 result===nothingcorrect result in $\mathcal{O}(n^2)$ stepssame as Stabilizersame as Stabilizersame as Stabilizer
on commuting operator in the stabilizer anticom_index==0 result!==nothing$\mathcal{O}(n^3)$; or $\mathcal{O}(n^2)$ if keep_result=false$\mathcal{O}(n^3)$$\mathcal{O}(n^2)$ if the state is pure, throws exception otherwise$\mathcal{O}(n^2)$
on commuting operator out of the stabilizer[1] anticom_index==rank result===nothing$\mathcal{O}(n^3)$, but the user needs to manually include the new operator to the stabilizer; or $\mathcal{O}(n^2)$ if keep_result=false but then result indistinguishable from cell above and anticom_index==0$\mathcal{O}(n^3)$ and rank goes up by onenot applicable if the state is pure, throws exception otherwise$\mathcal{O}(n^2)$ and rank goes up by one

Notice the results when the projection operator commutes with the state but is not generated by the stabilizers of the state (the last row of the table). In that case we have _, anticom_index, result = project!(...) where both anticom_index==rank and result===nothing, with rank being the new rank after projection, one more than the number of rows in the tableau before the measurement.

Bit Packing in Integers and Array Order

We do not use boolean arrays to store information about the qubits as this would be wasteful (7 out of 8 bits in the boolean would be unused). Instead, we use all 8 qubits in a byte and perform bitwise logical operations as necessary. Implementation details of the object in RAM can matter for performance. The library permits any of the standard UInt types to be used for packing the bits, and larger UInt types (like UInt64) are usually faster as they permit working on 64 qubits at a time (instead of 1 if we used a boolean, or 8 if we used a byte).

Moreover, how a tableau is stored in memory can affect performance, as a row-major storage usually permits more efficient use of the CPU cache (for the particular algorithms we use).

Both of these parameters are benchmarked (testing the application of a Pauli operator, which is an $\mathcal{O}(n^2)$ operation; and testing the canonicalization of a Stabilizer, which is an $\mathcal{O}(n^3)$ operation). Row-major UInt64 is the best performing and it is used by default in this library.

  • 1This can occur only if the state being projected is mixed. Both Stabilizer and Destabilizer can be used for mixed states by simply providing fewer stabilizer generators than qubits at initialization. This can be useful for low-level code that tries to avoid the extra memory cost of using MixedStabilizer and MixedDestabilizer but should be avoided otherwise. project! works correctly or raises an explicit warning on all 4 data structures.
+Datastructure Choice · QuantumClifford.jl

Data Structures Options

Choosing Appropriate Tableau Data Structure

There are four different data structures used to represent stabilizer states. If you will never need projective measurements you probably would want to use Stabilizer. If you require projective measurements, but only on pure states, Destabilizer should be the appropriate data structure. If mixed stabilizer states are involved, MixedStabilizer would be necessary.

Stabilizer is simply a list of Pauli operators in a tableau form. As a data structure it does not enforce the requirements for a pure stabilizer state (the rows of the tableau do not necessarily commute, nor are they forced to be Hermitian; the tableau might be underdetermined, redundant, or contradictory). It is up to the user to ensure that the initial values in the tableau are meaningful and consistent.

canonicalize!, project!, and generate! can accept an under determined (mixed state) Stabilizer instance and operate correctly. canonicalize! can also accept a redundant Stabilizer (i.e. not all rows are independent), leaving as many identity rows at the bottom of the canonicalized tableau as the number of redundant stabilizers in the initial tableau.

canonicalize! takes $\mathcal{O}(n^3)$ steps. generate! expects a canonicalized input and then takes $\mathcal{O}(n^2)$ steps. project! takes $\mathcal{O}(n^3)$ for projecting on commuting operators due to the need to call canonicalize! and generate!. If the projections is on an anticommuting operator (or if keep_result=false) then it takes $\mathcal{O}(n^2)$ steps.

MixedStabilizer provides explicit tracking of the rank of the mixed state and works properly when the projection is on a commuting operator not in the stabilizer (see table below for details). Otherwise it has the same performance as Stabilizer.

The canonicalization can be made unnecessary if we track the destabilizer generators. There are two data structures capable of that.

Destabilizer stores both the destabilizer and stabilizer states. project! called on it never requires a stabilizer canonicalization, hence it runs in $\mathcal{O}(n^2)$. However, project! will raise an exception if you try to project on a commuting state that is not in the stabilizer as that would be an expensive $\mathcal{O}(n^3)$ operation.

MixedDestabilizer tracks both the destabilizer operators and the logical operators in addition to the stabilizer generators. It does not require canonicalization for measurements and its project! operations always takes $\mathcal{O}(n^2)$.

For the operation _, anticom_index, result = project!(...) we have the following behavior:

projectionStabilizerMixedStabilizerDestabilizerMixedDestabilizer
on anticommuting operator anticom_index>0 result===nothingcorrect result in $\mathcal{O}(n^2)$ stepssame as Stabilizersame as Stabilizersame as Stabilizer
on commuting operator in the stabilizer anticom_index==0 result!==nothing$\mathcal{O}(n^3)$; or $\mathcal{O}(n^2)$ if keep_result=false$\mathcal{O}(n^3)$$\mathcal{O}(n^2)$ if the state is pure, throws exception otherwise$\mathcal{O}(n^2)$
on commuting operator out of the stabilizer[1] anticom_index==rank result===nothing$\mathcal{O}(n^3)$, but the user needs to manually include the new operator to the stabilizer; or $\mathcal{O}(n^2)$ if keep_result=false but then result indistinguishable from cell above and anticom_index==0$\mathcal{O}(n^3)$ and rank goes up by onenot applicable if the state is pure, throws exception otherwise$\mathcal{O}(n^2)$ and rank goes up by one

Notice the results when the projection operator commutes with the state but is not generated by the stabilizers of the state (the last row of the table). In that case we have _, anticom_index, result = project!(...) where both anticom_index==rank and result===nothing, with rank being the new rank after projection, one more than the number of rows in the tableau before the measurement.

Bit Packing in Integers and Array Order

We do not use boolean arrays to store information about the qubits as this would be wasteful (7 out of 8 bits in the boolean would be unused). Instead, we use all 8 qubits in a byte and perform bitwise logical operations as necessary. Implementation details of the object in RAM can matter for performance. The library permits any of the standard UInt types to be used for packing the bits, and larger UInt types (like UInt64) are usually faster as they permit working on 64 qubits at a time (instead of 1 if we used a boolean, or 8 if we used a byte).

Moreover, how a tableau is stored in memory can affect performance, as a row-major storage usually permits more efficient use of the CPU cache (for the particular algorithms we use).

Both of these parameters are benchmarked (testing the application of a Pauli operator, which is an $\mathcal{O}(n^2)$ operation; and testing the canonicalization of a Stabilizer, which is an $\mathcal{O}(n^3)$ operation). Row-major UInt64 is the best performing and it is used by default in this library.

  • 1This can occur only if the state being projected is mixed. Both Stabilizer and Destabilizer can be used for mixed states by simply providing fewer stabilizer generators than qubits at initialization. This can be useful for low-level code that tries to avoid the extra memory cost of using MixedStabilizer and MixedDestabilizer but should be avoided otherwise. project! works correctly or raises an explicit warning on all 4 data structures.
diff --git a/dev/ecc_example_sim/index.html b/dev/ecc_example_sim/index.html index b665711d0..2282175cd 100644 --- a/dev/ecc_example_sim/index.html +++ b/dev/ecc_example_sim/index.html @@ -20,7 +20,7 @@ errors = [PauliError(i,errprob) for i in 1:code_n(code)] fullcircuit = [ecirc..., errors..., scirc...]Example block output

And running this noisy simulation:

frames = pftrajectories(fullcircuit; trajectories=nframes)
 pfmeasurements(frames)
4×6 Matrix{Bool}:
- 1  0  1  1  0  1
- 0  0  0  0  0  0
- 0  0  1  0  0  0
- 0  0  0  0  0  0
+ 1 0 0 1 1 1 + 1 1 1 0 1 0 + 0 0 0 1 1 0 + 0 0 0 0 0 0 diff --git a/dev/graphs/index.html b/dev/graphs/index.html index 8aa6ee4a6..a7ce14e0a 100644 --- a/dev/graphs/index.html +++ b/dev/graphs/index.html @@ -43,4 +43,4 @@ + XZZ_ + ZX_Z + Z_XZ -+ _ZZX

Graphs are represented with the Graphs.jl package and plotting can be done both in Plots.jl and Makie.jl (with GraphMakie).

++ _ZZX

Graphs are represented with the Graphs.jl package and plotting can be done both in Plots.jl and Makie.jl (with GraphMakie).

diff --git a/dev/index.html b/dev/index.html index 0dcca0c54..4245e4e5c 100644 --- a/dev/index.html +++ b/dev/index.html @@ -15,4 +15,4 @@ julia> tCNOT * S"-XX +ZZ" - X_ -+ _Z

Circuit Simulation

The circuit simulation component of QuantumClifford.jl enables Monte Carlo (or symbolic) simulations of noisy Clifford circuits. It provides three main simulation methods: mctrajectories, pftrajectories, and petrajectories. These methods offer varying levels of efficiency, accuracy, and insight.

Monte Carlo Simulations with Stabilizer Tableaux (mctrajectories)

The mctrajectories method runs Monte Carlo simulations using a Stabilizer tableau representation for the quantum states.

Monte Carlo Simulations with Pauli Frames (pftrajectories)

The pftrajectories method runs Monte Carlo simulations of Pauli frames over a single reference Stabilizer tableau simulation. This approach is much more efficient but supports a smaller class of circuits.

Symbolic Depth-First Traversal of Quantum Trajectories (petrajectories)

The petrajectories method performs a depth-first traversal of the most probable quantum trajectories, providing a fixed-order approximation of the circuit's behavior. This approach gives symbolic expressions for various figures of merit instead of just a numeric value.

++ _Z

Circuit Simulation

The circuit simulation component of QuantumClifford.jl enables Monte Carlo (or symbolic) simulations of noisy Clifford circuits. It provides three main simulation methods: mctrajectories, pftrajectories, and petrajectories. These methods offer varying levels of efficiency, accuracy, and insight.

Monte Carlo Simulations with Stabilizer Tableaux (mctrajectories)

The mctrajectories method runs Monte Carlo simulations using a Stabilizer tableau representation for the quantum states.

Monte Carlo Simulations with Pauli Frames (pftrajectories)

The pftrajectories method runs Monte Carlo simulations of Pauli frames over a single reference Stabilizer tableau simulation. This approach is much more efficient but supports a smaller class of circuits.

Symbolic Depth-First Traversal of Quantum Trajectories (petrajectories)

The petrajectories method performs a depth-first traversal of the most probable quantum trajectories, providing a fixed-order approximation of the circuit's behavior. This approach gives symbolic expressions for various figures of merit instead of just a numeric value.

diff --git a/dev/mixed/index.html b/dev/mixed/index.html index d86fc9641..3df5d7b1d 100644 --- a/dev/mixed/index.html +++ b/dev/mixed/index.html @@ -57,4 +57,4 @@ + XXX + ZZ_ 𝒵ₗ━━━ -+ Z_Z

Destabilizer and MixedStabilizer do not use any column swaps on instantiation as they do not track the logical operators.

++ Z_Z

Destabilizer and MixedStabilizer do not use any column swaps on instantiation as they do not track the logical operators.

diff --git a/dev/noise/index.html b/dev/noise/index.html index b74050418..ad3957375 100644 --- a/dev/noise/index.html +++ b/dev/noise/index.html @@ -1,2 +1,2 @@ -Noise Processes · QuantumClifford.jl
+Noise Processes · QuantumClifford.jl
diff --git a/dev/noisycircuits/index.html b/dev/noisycircuits/index.html index 30348c16d..1c7307001 100644 --- a/dev/noisycircuits/index.html +++ b/dev/noisycircuits/index.html @@ -1,2 +1,2 @@ -Simulation of Noisy Circuits · QuantumClifford.jl

Simulation of Noisy Clifford Circuits

Unstable

This is unfinished experimental functionality that will change significantly.

We have experimental support for simulation of noisy Clifford circuits which can be imported with using QuantumClifford.Experimental.NoisyCircuits.

Both Monte Carlo and Perturbative Expansion approaches are supported. When performing a perturbative expansion in the noise parameter, the expansion can optionally be performed symbolically, to arbitrary high orders.

Multiple notebooks with examples are also available. For instance, see this tutorial on entanglement purification for many examples.

+Simulation of Noisy Circuits · QuantumClifford.jl

Simulation of Noisy Clifford Circuits

Unstable

This is unfinished experimental functionality that will change significantly.

We have experimental support for simulation of noisy Clifford circuits which can be imported with using QuantumClifford.Experimental.NoisyCircuits.

Both Monte Carlo and Perturbative Expansion approaches are supported. When performing a perturbative expansion in the noise parameter, the expansion can optionally be performed symbolically, to arbitrary high orders.

Multiple notebooks with examples are also available. For instance, see this tutorial on entanglement purification for many examples.

diff --git a/dev/noisycircuits_API/index.html b/dev/noisycircuits_API/index.html index b4bc3a1e7..b45d73246 100644 --- a/dev/noisycircuits_API/index.html +++ b/dev/noisycircuits_API/index.html @@ -1,2 +1,2 @@ -API · QuantumClifford.jl

Full API (autogenerated)

Unstable

This is experimental functionality with an unstable API.

+API · QuantumClifford.jl

Full API (autogenerated)

Unstable

This is experimental functionality with an unstable API.

diff --git a/dev/noisycircuits_mc/index.html b/dev/noisycircuits_mc/index.html index 5a97c118f..1303f278b 100644 --- a/dev/noisycircuits_mc/index.html +++ b/dev/noisycircuits_mc/index.html @@ -15,7 +15,7 @@ # then a Bell measurement # followed by checking whether the final result indeed corresponds to the correct Bell pair. circuit = [n,g1,g2,m,v]Example block output

And we can run a Monte Carlo simulation of that circuit with mctrajectories.

mctrajectories(initial_state, circuit, trajectories=500)
Dict{CircuitStatus, Float64} with 4 entries:
+  failure:CircuitStatus(3)       => 4.0
   true_success:CircuitStatus(1)  => 487.0
   continue:CircuitStatus(0)      => 0.0
-  false_success:CircuitStatus(2) => 9.0
-  failure:CircuitStatus(3)       => 4.0

For more examples, see the notebook comparing the Monte Carlo and Perturbative method or this tutorial on entanglement purification for many examples.

Interface for custom operations

If you want to create a custom gate type (e.g. calling it Operation), you need to definite the following methods.

applywstatus!(s::T, g::Operation)::Tuple{T,Symbol} where T is a tableaux type like Stabilizer or a Register. The Symbol is the status of the operation. Predefined statuses are kept in the registered_statuses list, but you can add more. Be sure to expand this list if you want the trajectory simulators using your custom statuses to output all trajectories.

There is also applynoise! which is convenient wait to create a noise model that can then be plugged into the NoisyGate struct, letting you reuse the predefined perfect gates and measurements. However, you can also just make up your own noise operator simply by implementing applywstatus! for it.

You can also consult the list of implemented operators.

+ false_success:CircuitStatus(2) => 9.0

For more examples, see the notebook comparing the Monte Carlo and Perturbative method or this tutorial on entanglement purification for many examples.

Interface for custom operations

If you want to create a custom gate type (e.g. calling it Operation), you need to definite the following methods.

applywstatus!(s::T, g::Operation)::Tuple{T,Symbol} where T is a tableaux type like Stabilizer or a Register. The Symbol is the status of the operation. Predefined statuses are kept in the registered_statuses list, but you can add more. Be sure to expand this list if you want the trajectory simulators using your custom statuses to output all trajectories.

There is also applynoise! which is convenient wait to create a noise model that can then be plugged into the NoisyGate struct, letting you reuse the predefined perfect gates and measurements. However, you can also just make up your own noise operator simply by implementing applywstatus! for it.

You can also consult the list of implemented operators.

diff --git a/dev/noisycircuits_ops/index.html b/dev/noisycircuits_ops/index.html index 2485f690e..cc21953c0 100644 --- a/dev/noisycircuits_ops/index.html +++ b/dev/noisycircuits_ops/index.html @@ -10,4 +10,4 @@ gate3 = SparseGate(tSWAP, [1,3]) cg = ConditionalGate(gate1, gate2, 2) dg = DecisionGate([gate1,gate2,gate3], bit_register->1) # it will always perform gate1 -[sMX(4,1), sMZ(5,2), cg, dg]Example block output

TODO: Split ConditionalGate into quantum conditional and classical conditional

+[sMX(4,1), sMZ(5,2), cg, dg]Example block output

TODO: Split ConditionalGate into quantum conditional and classical conditional

diff --git a/dev/noisycircuits_perturb/index.html b/dev/noisycircuits_perturb/index.html index 025a5be13..84988b5d9 100644 --- a/dev/noisycircuits_perturb/index.html +++ b/dev/noisycircuits_perturb/index.html @@ -18,6 +18,6 @@ circuit = [n,g1,g2,m,v] petrajectories(initial_state, circuit)
Dict{CircuitStatus, Float64} with 3 entries:
+  failure:CircuitStatus(3)       => 0.0129373
   true_success:CircuitStatus(1)  => 0.967065
-  false_success:CircuitStatus(2) => 0.019406
-  failure:CircuitStatus(3)       => 0.0129373

For more examples, see the notebook comparing the Monte Carlo and Perturbative method or this tutorial on entanglement purification.

Symbolic expansions

The perturbative expansion method works with symbolic variables as well. One can use any of the symbolic libraries available in Julia and simply plug symbolic parameters in lieu of numeric parameters. A detailed example is available as a Jupyter notebook.

Interface for custom operations

If you want to create a custom gate type (e.g. calling it Operation), you need to definite the following methods.

applyop_branches!(s::T, g::Operation; max_order=1)::Vector{Tuple{T,Symbol,Real,Int}} where T is a tableaux type like Stabilizer or a Register. The Symbol is the status of the operation, the Real is the probability for that branch, and the Int is the order of that branch.

There is also applynoise_branches! which is convenient for use in NoisyGate, but you can also just make up your own noise operator simply by implementing applyop_branches! for it.

You can also consult the list of implemented operators.

+ false_success:CircuitStatus(2) => 0.019406

For more examples, see the notebook comparing the Monte Carlo and Perturbative method or this tutorial on entanglement purification.

Symbolic expansions

The perturbative expansion method works with symbolic variables as well. One can use any of the symbolic libraries available in Julia and simply plug symbolic parameters in lieu of numeric parameters. A detailed example is available as a Jupyter notebook.

Interface for custom operations

If you want to create a custom gate type (e.g. calling it Operation), you need to definite the following methods.

applyop_branches!(s::T, g::Operation; max_order=1)::Vector{Tuple{T,Symbol,Real,Int}} where T is a tableaux type like Stabilizer or a Register. The Symbol is the status of the operation, the Real is the probability for that branch, and the Int is the order of that branch.

There is also applynoise_branches! which is convenient for use in NoisyGate, but you can also just make up your own noise operator simply by implementing applyop_branches! for it.

You can also consult the list of implemented operators.

diff --git a/dev/plotting/56551129.svg b/dev/plotting/4c4a57c7.svg similarity index 98% rename from dev/plotting/56551129.svg rename to dev/plotting/4c4a57c7.svg index 1d43a48e1..f3eab8b03 100644 --- a/dev/plotting/56551129.svg +++ b/dev/plotting/4c4a57c7.svg @@ -1,23 +1,23 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + Visualizations · QuantumClifford.jl

Visualizations

Stabilizers have a plot recipe that can be used with Plots.jl or Makie.jl. It simply displays the corresponding parity check matrix (extracted with stab_to_gf2) as a bitmap image. Circuits can be visualized with Quantikz.jl.

Importing the aforementioned packages together with QuantumClifford is necessary to enable the plotting functionality (implemented as package extensions).

Plots.jl

In Plots.jl we have a simple recipe plot(s::Stabilizer; xzcomponents=...) where xzcomponents=:split plots the tableau heatmap in a wide form, X bits on the left, Z bits on the right; or xzcomponents=:together plots them overlapping, with different colors for I, X, Z, and Y.

using QuantumClifford, Plots
-plot(random_stabilizer(20,30), xzcomponents=:split)
Example block output
using QuantumClifford, Plots
-plot(canonicalize!(random_stabilizer(20,30)))
Example block output
using QuantumClifford, Plots
-plot(canonicalize_gott!(random_stabilizer(30))[1], xzcomponents=:split)
Example block output
using QuantumClifford, Plots
-plot(canonicalize_gott!(random_stabilizer(30))[1]; xzcomponents=:together)
Example block output
using QuantumClifford, Plots
-plot(canonicalize_rref!(random_stabilizer(20,30),1:30)[1]; xzcomponents=:together)
Example block output

Makie.jl

Makie's heatmap can be directly called on Stabilizer.

using QuantumClifford, CairoMakie
+plot(random_stabilizer(20,30), xzcomponents=:split)
Example block output
using QuantumClifford, Plots
+plot(canonicalize!(random_stabilizer(20,30)))
Example block output
using QuantumClifford, Plots
+plot(canonicalize_gott!(random_stabilizer(30))[1], xzcomponents=:split)
Example block output
using QuantumClifford, Plots
+plot(canonicalize_gott!(random_stabilizer(30))[1]; xzcomponents=:together)
Example block output
using QuantumClifford, Plots
+plot(canonicalize_rref!(random_stabilizer(20,30),1:30)[1]; xzcomponents=:together)
Example block output

Makie.jl

Makie's heatmap can be directly called on Stabilizer.

using QuantumClifford, CairoMakie
 s = S"IIXZ
       ZZIZ
       YYIZ
@@ -47,4 +47,4 @@
 f=Figure()
 stabilizerplot_axis(f[1,1],random_stabilizer(100))
 f
Example block output

Quantikz.jl

With the Quantikz library you can visualize gates or sequences of gates.

using QuantumClifford, Quantikz
-circuit = [sCNOT(1,2), SparseGate(random_clifford(4), [1,4,5,6]), sMZ(4)]
Example block output
+circuit = [sCNOT(1,2), SparseGate(random_clifford(4), [1,4,5,6]), sMZ(4)]Example block output diff --git a/dev/references/index.html b/dev/references/index.html index 61dfd481e..6cc44c099 100644 --- a/dev/references/index.html +++ b/dev/references/index.html @@ -1,2 +1,2 @@ -Suggested Readings & References · QuantumClifford.jl

Suggested reading

For the basis of the tableaux methods first read (Gottesman, 1998) followed by the more efficient approach described in (Aaronson and Gottesman, 2004).

The tableaux can be canonicalized (i.e. Gaussian elimination can be performed on them) in a number of different ways, and considering the different approaches provides useful insight. The following methods are implemented in this library:

For the use of these methods in error correction and the subtle overlap between the two fields consider these resources. They are also useful in defining some of the specific constraints in commutation between rows in the tableaux:

These publications describe the uniform sampling of random stabilizer states:

For circuit construction routines (for stabilizer measurements for a given code):

For quantum code construction routines:

For classical code construction routines:

References

+Suggested Readings & References · QuantumClifford.jl

Suggested reading

For the basis of the tableaux methods first read (Gottesman, 1998) followed by the more efficient approach described in (Aaronson and Gottesman, 2004).

The tableaux can be canonicalized (i.e. Gaussian elimination can be performed on them) in a number of different ways, and considering the different approaches provides useful insight. The following methods are implemented in this library:

For the use of these methods in error correction and the subtle overlap between the two fields consider these resources. They are also useful in defining some of the specific constraints in commutation between rows in the tableaux:

These publications describe the uniform sampling of random stabilizer states:

For circuit construction routines (for stabilizer measurements for a given code):

For quantum code construction routines:

For classical code construction routines:

References

diff --git a/dev/stab-algebra-manual/index.html b/dev/stab-algebra-manual/index.html index fe4bf3b2e..a0e6aa781 100644 --- a/dev/stab-algebra-manual/index.html +++ b/dev/stab-algebra-manual/index.html @@ -294,4 +294,4 @@ 𝒮𝓉𝒶𝒷━ + _ZX - _Z_ -- Z_X

Mixed States

Both the Stabilizer and Destabilizer structures have more general forms that enable work with mixed stabilizer states. They are the MixedStabilizer and MixedDestabilizer structures, described in Mixed States. More information that can be seen in the data structures page, which expands upon the algorithms available for each structure.

Random States and Circuits

random_clifford, random_stabilizer, and enumerate_cliffords can be used for the generation of random states.

+- Z_X

Mixed States

Both the Stabilizer and Destabilizer structures have more general forms that enable work with mixed stabilizer states. They are the MixedStabilizer and MixedDestabilizer structures, described in Mixed States. More information that can be seen in the data structures page, which expands upon the algorithms available for each structure.

Random States and Circuits

random_clifford, random_stabilizer, and enumerate_cliffords can be used for the generation of random states.

diff --git a/dev/tutandpub/index.html b/dev/tutandpub/index.html index 82e6616c5..1f8c9b5ce 100644 --- a/dev/tutandpub/index.html +++ b/dev/tutandpub/index.html @@ -1,2 +1,2 @@ -Tutorials and Publications · QuantumClifford.jl
+Tutorials and Publications · QuantumClifford.jl