From e0c2efc58e8fe148b2df0b7439b8c2b389f2f742 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Wed, 19 Jun 2024 16:50:32 +0000 Subject: [PATCH] build based on ee430b8 --- dev/.documenter-siteinfo.json | 2 +- dev/API/index.html | 104 ++++++++++---------- dev/ECC_API/index.html | 10 +- dev/ECC_evaluating/85cf4314.png | Bin 0 -> 42279 bytes dev/ECC_evaluating/b22b4368.png | Bin 42799 -> 0 bytes dev/ECC_evaluating/b68a4366.png | Bin 56055 -> 0 bytes dev/ECC_evaluating/e026beb7.png | Bin 0 -> 55971 bytes dev/ECC_evaluating/index.html | 4 +- dev/allops/index.html | 2 +- dev/canonicalization/04b41d5f.png | Bin 9771 -> 0 bytes dev/canonicalization/0e673ab7.png | Bin 9384 -> 0 bytes dev/canonicalization/2a514586.png | Bin 0 -> 9467 bytes dev/canonicalization/331ff1f5.png | Bin 0 -> 9950 bytes dev/canonicalization/59f6b920.png | Bin 9901 -> 0 bytes dev/canonicalization/8c33a1d9.png | Bin 0 -> 9818 bytes dev/canonicalization/e28e2f28.png | Bin 0 -> 9833 bytes dev/canonicalization/fd9c622d.png | Bin 9718 -> 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 | 2 +- dev/plotting/{34cc14b5.svg => 256a1663.svg} | 12 +-- dev/plotting/{88bc8716.svg => 9f652708.svg} | 12 +-- dev/plotting/{b0af8b13.svg => a0f49db2.svg} | 12 +-- dev/plotting/{0fce654e.svg => ad74ee68.svg} | 12 +-- dev/plotting/{4eef30c0.svg => bdfa5fa1.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, 120 insertions(+), 120 deletions(-) create mode 100644 dev/ECC_evaluating/85cf4314.png delete mode 100644 dev/ECC_evaluating/b22b4368.png delete mode 100644 dev/ECC_evaluating/b68a4366.png create mode 100644 dev/ECC_evaluating/e026beb7.png delete mode 100644 dev/canonicalization/04b41d5f.png delete mode 100644 dev/canonicalization/0e673ab7.png create mode 100644 dev/canonicalization/2a514586.png create mode 100644 dev/canonicalization/331ff1f5.png delete mode 100644 dev/canonicalization/59f6b920.png create mode 100644 dev/canonicalization/8c33a1d9.png create mode 100644 dev/canonicalization/e28e2f28.png delete mode 100644 dev/canonicalization/fd9c622d.png rename dev/plotting/{34cc14b5.svg => 256a1663.svg} (98%) rename dev/plotting/{88bc8716.svg => 9f652708.svg} (98%) rename dev/plotting/{b0af8b13.svg => a0f49db2.svg} (98%) rename dev/plotting/{0fce654e.svg => ad74ee68.svg} (99%) rename dev/plotting/{4eef30c0.svg => bdfa5fa1.svg} (99%) diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 37290b1de..7d718d496 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-06-19T15:58:31","documenter_version":"1.4.1"}} \ No newline at end of file +{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-06-19T16:50:27","documenter_version":"1.4.1"}} \ No newline at end of file diff --git a/dev/API/index.html b/dev/API/index.html index 1f0b9259c..62cf11437 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.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.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., 2020).

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., 2020).

See also: canonicalize_clip!

source
QuantumClifford.canonicalize_clip!Method
canonicalize_clip!(
     state::QuantumClifford.AbstractStabilizer;
     phases
 ) -> QuantumClifford.AbstractStabilizer
@@ -294,25 +294,25 @@
 + _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.commFunction

Check whether two operators commute.

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

julia> P"XX"*P"ZZ", P"ZZ"*P"XX"
+
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.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
+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.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";
@@ -329,7 +329,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
@@ -342,7 +342,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_
@@ -406,32 +406,32 @@
 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.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.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(
+ 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.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.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_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_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
@@ -556,47 +556,47 @@
 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.traceout!Method
traceout!(
+

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

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}}}
-

Inverse of a CliffordOperator

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
@@ -608,7 +608,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
 
@@ -631,7 +631,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
 
@@ -654,4 +654,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 b8772af85..9c4eb914d 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.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/85cf4314.png b/dev/ECC_evaluating/85cf4314.png new file mode 100644 index 0000000000000000000000000000000000000000..0b329776b64602670fb0b1ff23a147b6c096de6e GIT binary patch literal 42279 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 VU~LmoPx6s>>Kf@}YdfC)KLGW)&#nLf literal 0 HcmV?d00001 diff --git a/dev/ECC_evaluating/b22b4368.png b/dev/ECC_evaluating/b22b4368.png deleted file mode 100644 index aaa93990a4196167afabeb7659329ff0e185066c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42799 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 l@@o}ydIv=j=`9fm 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 CjBDxu diff --git a/dev/ECC_evaluating/e026beb7.png b/dev/ECC_evaluating/e026beb7.png new file mode 100644 index 0000000000000000000000000000000000000000..cc2103791668f33fc406675c04c017f05ec11fa6 GIT binary patch literal 55971 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 Fq7!kl_g&eg^ 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

U4ELVKxmWD6@%rMl#q~+lti+-TF%(Wh%}2w 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 F{{fq%!zcg% literal 0 HcmV?d00001 diff --git a/dev/ECC_evaluating/index.html b/dev/ECC_evaluating/index.html index 8aff85741..6bc7d30e9 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 53714456d..0904d19e3 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/04b41d5f.png b/dev/canonicalization/04b41d5f.png deleted file mode 100644 index 58b4bb6ad864363d9e91b36d4b7842e0cbc25c5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9771 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 ZjSF*40`wP0unNBG-Mu?2ejWGGe*t70zFGhP diff --git a/dev/canonicalization/0e673ab7.png b/dev/canonicalization/0e673ab7.png deleted file mode 100644 index 59b2869719b6e39fc21de0ef9164c1c0fb757a6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9384 zcmdU#2~<`}|k#zV~_Y#gvp?hc?C;J~*J(W3YSq-pyZh zlm=pDm+*h`)hv2LFskN=Fwfu3imG|o$Ydff$j&<=q8tqCucE))R{`%?suw>7W1?(c zhCr;`vT_Lmv1ipD1mgU$MRwQ;*Rlo-S9U0;CC|(sJVQ_EfyaASA`loE7 zym8qb2j(VCZ1PNeeZsz> z*$0o?t!-7~Zc5KL$uHt*;A?9?ak7*LbD{|JsN2^^GFtczT}B#|UQRn{P&1K$KIq9q_9}Gw47^u5r2(8zyTyV=S&vs-SNOG7SG~l_d zV!ha%H}!?Dgo`;_%wvjLJqquJU{9{fDJZ&4A3745pK$Tb3uqnxi+v|QrV5U0g#UCW zb|)-!&(UVeV>`fk`|Tp_^=JaO&%_1Iu8rXqBB8#OI@ zTAVpA%Mrf)-eyj0*H-B2h;}Ux60>aPM^*W(#CWhfWG_%%qt{Twm4U)cm%`)Ck`STn z8^M{-{`w>;g~?=sPad|28=I`5q>vTLww`%+bz6BZWvtPd(;3p?Pn=HaAXbywiae;4 zBz>3lYa4$Y79gP=XB9jnDbpm$nyC~zd2WznHQ8AmH7*xrR`=gLf!1Yh3hg{%D%g>o zx)OT$j0jF-*TdniABFQ1Wh5K5X--{T9hNlCb*L|^o|DL>BF;}=!eeOLR`IUHtKnvn z!%)RAQ_@jZJt`!R7vTH_2&)&{lsTH9shDCJR*uwM zT)xKlmE|sLrxhS%hYxNFZms!ljjir5X*g14>+z-rqQU>36QY$rr;arIlNBDB$yydn=kl0;G1HM)%CUT<233>}&B{X(WmOYz(NA$4 zc$GT&OgZ`iOXvd6@4E`&+!-xl8@%rR;H(U7+^ldxbDmrFwDt<$1U-z3dcH|6#Xvoz zP2KtOWfh(pW;BS4nauae;bqLa(uZ!*!)T8tuKS2QX>%3XJ)Sg@wx4K={o9P<-`>N2 zn52@97$S&yzr=9w^EHG7J*wZE2Nk^B@~aHTT2XOPT$?WeV=0$Jop#A|wndfc8ANMz zy{KShRwZNGJLa7?mQR!VYmkpJSY*G0GV4KSi{$gEIp6< zEf|Ta*P+6XrTAeN&3_9;{~Vm}-D2Dd zhX#v#FwN`+W@&J7Ih_@!r-84LrerbN^d68GPjK?-;^kQ?08oz5|5^Yi2QYZF>(0md zT@Olnn;DD)7)y^}!x`Q-XZu=wVQ%^fhHH(gt=WMr@BcIvKnV#zdEcE_4Sr>~bcyv8 z&|_R>*l44H79>a!qFde>PbRw}l}DawX=y=XfAZ#3JIi`P&LKzJC{N7@6-@t*Mwc-7>0a!)U$;Lu`x^g|f5)s`>OGBG4FSnOmF%@`L$V=xZoJJ_ zSKaiCd#R7TGBa;8$cH}dGMTJa1y>n4Ipk2!Xv0R%%SDp|Gw>HL3(hqdC|k*n>GnHj zPPg7RAw*1&NcB1h#M3()G&O}B7gk-}`T+KGWt%AJE7N3$Yvuzfk;7GGbb9EmFQIX* zuYJoc0Ccf*ZH*`+a_H{WZTyN*A`T~1CQm)bUo*e|Iz(w7wB0wxEv;6XaxNDPjrBL+ zqDE^S>ZhirRK3&e@${I@3zzCv;HwMh%;_uI89LOhIOeQAPL58XuD`Z0IZtmIoB)jE z0<&db-?v(*p!+#F>hii$7SS-(k>CVx-f~zZ^CRPtD%ramR=9B081PzQI1_|AdSe;J zsK?IAXab!JR~>P0?zD(04jE5m0mOI%eq|ZuoSD&htD_ynGGMk+ZOHSzi8j$StF$)` zpkwP``pt-t_a}2~6tiG9X_Rx5f>2XT%zo%8Wv{_(Q5g3M}?}chWia0o#8wB|LNh2 zl4qD$l&3T-VgK#LwGL<>N zihCG*5Wb6-L`K~tq+8AZP^$l-m|xWdyFsv=zvk8Iox$+Sj|)V_cNbK=6Fcr^CAvam z99T#kw4{-U!kJSmn~p9nE=j?_YYpTGr!;3<0iX}YRZJ_}_O6phVGr0uEnGe!n3YW+ zB)BbQou4HtEpq6IX;&D&tYfa$FnTmqID6{Z#pR0m6yU=oK7an)uzGf^ z`Jm<;jYuL4+#J=)26w0me0^A35Y`K*MU+XN=M(6p7M6Q>e-b$PoUWIkJeZ{s`R;Gz z0>Cw@((QWDfnt!GD`E5^9so}vp%8ah<>b1%05j>&930%s7rSGSD4r30@HYJ>w{ zBTm04tUt-6Yw9&*6d97`4OGfxwPG%`^DOIY;unw@Mo6Z56E!t84XKusoq+`|^yuDd z9I%)SnNyxQEpJLsw^VeE7u~|{g*0`?kG8n!*MQ?((ekcI=43lQG06dd74+{=U!SC( z3~(c66DV{f3l1i{X3GI9?+1?9kkKQcUHov`BOWYkkNny_pc*eXsm)hVP{1&}8{#YJ zNS@rdC&(flJnA;rlD;Gttg41aS23QYQauF#2yjjqaA77+DZ$R??a>R$Q747Oq;^09 zx;bfMHERqTf&Btlavnfv#KVP(EY?$K^HG#O9*~N-B zd>{BgPuS5)yB4sEJpWY+IrRMQ<7iiAlsrb+`Z!t~WRW@3Dbn)`c?!+*(>rD(eI1D^ z*f7W*nwht>vLXS%v6=oU`{2grY;q?|pzCV^9WbTS0<^ZL~DRlwz{|(ep^Pw+q|x=Fz~63ynD#O zf)l8e#AsP|S?9TiH1ohOwY5d;^bSb~2wG1Yj$EaLf?YRk2QUgDw0c`W53xvp`SPV! zqGbuCSrF`Q6emyo|=*p_O6(P*41||G@FyP2&aa@)#k2mu|?|w z_Ud3NHNwt&lOwScG20Yt9Rxx#FHIf*j+eQ)xi>q_^vvh%pN+gwz^z-7-Cs*WQ0eUH z@j($MQ(>rV2A+yuHNkhNf5@?}IM-jV>Tv+3HFkn&mzjwP2K{8LUY}zrZ8Rk{0y8vf zc9fOuu+y)7F|^G4fITJz?%~6w;eDrb(kEVMB{q&&z!~!1zuiKB^2PbGRvV)x*=pillm%C| z+PDZTb7^>CL66aw?vM}MW3(P)RR=jwY9umUqsa~ zTP6!?K{Y)PVt3|G%avq4ehgG}Jf0!Fo~z#- zWPq)FEJpeyAI)(@%gHzJvF0KL&KirpwcM!xchB7K-4TL0HTYo8ZEUyX9!O6;rE%KT zL!QVj8}TSE>9ls*Y={P)AiP`FrXI}x^u*vg{f?zwfqGaZt?KFdjI$reTY7I${lzs4 z3xxenkZWscZ+#`6pqkh=6T{`NDNNVPnB`d~B2_xD<8Lh%NFmomrx)4ECm`ExezS!n zhl;Ju4FGkcQa-&&8P!YO!Tvyu^bZhDECSI2OY$h72*v?(sZzts%uSYwN?W>ves-K- z2h<;U*M?Whe~sbqI-f|t5^Z%YxkuT)#uM%;{)=wRAAoq{CRK=sXt1|xPlMRSwfLTv z81bM6l6B$^o$l+0%<4e3F%}Cf`TjKRM?7`sM@qATC9?R%Q%Edi&VQ`^R&23ML>kV3 z)L<@$;=|>#ZwUE-wZ(kw_y$h6CxK><@?G~)*Q5W`bb{pI|D?s8l@qO)5#j=#Emv_5 zc*Y^mOHY}K2@@SHD}L2Q@CTskOr20AXtT^vtyN=$vjgg_{7G&|ek5%u*VK3J;tV0- zN<7UB{9M2u`YnLk=|RQPT`0(F0>&2+Mn?;2qp^DD5AVB)`X?8dWOQ_NE-Kj1uh2Vn z=h4$imwEGusA#1fixXHxK>^Rzdq8*)riV zHNyM8zh9z$i_(G+TWc{;KxGmE1By}^1woK04rL63iV)^hQFuUsr$$g_ zr3?ZgqJ%k#ihzOy5lEOq7z6|iA%rOq$lK?jZ@s&^p1tecTOSwJB5Ng_oc-T_$opDZetX zj47yLr#Eosm{U74Mgu&6NSedUwMj@8rd95JR13{M5CrAP|Bg7_UJR8LObvC?UrcW-6s> z(6=8(Abve@75;qZmk7kh-5WvBhb8_^-=5W^AexuZ%;hXbzAe7;AtS%4YS(u1vDrjP zhOBLOm3asEmKGR2o}9tOiV1rWt~Iw+L;kJ7{}S<&DeN{ zgQaDReCx)!I%Ti;aim<4rjj9RXgtBpCQWO|R!_*t2z$0vGB}`EgWT>LQ{@mEXe z3?f>!Nd3l;-JpIGTKlz>s|Ro0x@FEasEzQiD{{z&*XXwOBn{_Bw5nB>X_xIlYuRIM zoCBn2=}HRJp%f)W1_1=An^DPPm;%$Y349=9lv@Fu6LM{Z=N zJ?7CxsGL{7-kDxa{68diIJ~9*bFidAp{FVUi*g-!cD=kWWa1u85GCguG}q;Bike^$ zb(d$_^3EfnE&qDgkt0W#PX5h(lu%QYduI5YF?z98dx?%*nTpQN&dwq1Hcbk9cLbS| z8!o(U1vZsJaFb)-rFj+(xxgRqD6D2p8q$b8oZ{1ua|v&lOdR|PbAN6mG`e@`{1&w6 zjj5VSjvoJ&I~4v2ZBEgQjBH!5q-}!sWkwaBuA8VkSz+BML!G)l znh`pQp)Nk#tkxUYV>)YUGu&E zEvMbnXS=babbq=IiMr^O*Va|)c@l$3G%<%pv?HeWI925F^5*W$#r8bvVh2fKq4~a@ zb3n(<-KGf<@6W=e-T2()%cYHJY7x9R_EO*c9H&Pczan%{m%4>fS`Sj<_h9~riv7bZ z!ZaO6^>j;-u?mHuG++oXm zzJp0Ote-f zc-dET$*|6|DKMTXOU`Cwb(b5}F-r!|acZhPPU)h*Vih9Hlr7hcu&xGx_kK7gy`^|H z4y*Z!z;-$EWe*>sm2P*4sg2G2q}OO_{^TiX%OVhnkg%utV(hlQM4~Nks+=kNC)E-6eqDRJ?gARWJ!W#X)&G{eutC*pBiZ_L8udavkP_v+YLB*x*9=Y5I zYpYihTON+BtVcaqity%~S|g77MHb8PF{Q{$hg|HXcZSyR5Ap zR;Dm$L7KSObX_{nCqr}rs3%#BY_IDV^JY-nN|!w6PbO>IALZ24U&Fly@Bj$sz_yGv zL$3v-u?_v^Fr0PB-_6%77(A6TevYW=j zO&6>U%5`Z_S~{=e=F~w3rT&`bLq?zUD+DoIT=J{0G$>zi-i%!~LA5wVluFfq?aRWL z++DYCSmK}SKE|;jKplSFnW#V43G`ozpXyh`tG{yP%9!IZC>>_#>MeTw{zxf>5p9wK z8J@RSTam(kakSv2rNW@x%3L|kr>BhbBoq1yPv;L;2}U#VD}qtvpj>gybmMw_#mpPi zmV*;Tp3e1Zx4|7f;{3vfzeOK6mXkcmrqM_wt}a_Z2bW`#%Q!~03c^} zm#YvB&655j_m&JfkVH>1*`k$s_T@J7=#`a$fdS9u%{dSSWf{AK@#^rxA*A?<-l3ID zyc!F@6~vBD%%&LS)Bq2UcT+SG#}B_WqjC~v%9gZCjVM5`Ms1Ele8hvV{^EWcl9sGs z){Pj4Yd?gl)e-G$fPf0=!3~&$3!NV#A8H z^3!p3Z|;#n*~Qe{AJpjIx^^(-zai{nwtTI|u#iqv1|4HTP^2VN)}|4vu7JtJYhsiN zf=o;2TzojjrBb!12SE!xSjjI!n$}JiysCWZpsUEmWu2t~R!?ympdA-=o@rCw;RKUp z6|=Lu&aEa^5o2#025XCH2vmsBEk9TA{UQG-#wocCZGK~|>=H-qcKhFh*OuC6$$(zpoV1q%)?@}Y zWeQXo-2j$jd`P(Xd3JRao8alD`j1LVG9FxIsx ziPBXL!ALcG*%vij!>2ovy*e~hc0sBfGJ18hYK34V6*w-I5!1IYqD3Zuv_&+}71SbE z9$p%5OvXeADuxo4rju!U;Y|z5+29To|8CDbRv5oIhalq;Gywbz^t*Yd@YxPEn(z|J zwJq0NG3~;$nGd({0t{iA^b;zl7sn1yM6WE+!e+0CD+Im0VQhj*b`I>C9&XAD*bW;< zCm*{tcLO&AcukHbmE#44F2TdMwW%`==oOxNroap}%;HAOJL6cItW?;{aM2aKy`}Bl zdBP-kvT~F`!iehew2>4nB&Qa6{ARxhzK>sM&t=kgFbqwNS>hLgT@Y9p`i`V(rUqT#NwIjAMH&%YmYyA#+! z-@2!j__3+L8NyFEvd7IOzZPwQAmN726nY)?ZotHr37xl%x0R70@9r5R!)HLWCsD(| z;L-u^+{Am_H!xD%SQy2K@wr>nH=3fFlGX4tt;VLPbc@mLnF~hOo42Iy1RlbHZPA%w z(GS7RfUTskz<>Mp?QJ_3;8oGjCycd4CqvsQJMsAv_2KQeP zk63KW^zE%EG4WE^LbDMAg!65xw%^KAsfZIMm6KHyWxlMCk-P3m)`vub7BmAJy)?a0KN#KgrT&T|Ozr*a~47MN3O-?(HqhBx^v@;lQ}0@z@aA zgT(-TD#-Hn?7c)7t}H1$#8fyplnohaEtnMj(77ZPN4Msb+4^12Jy}L@7hqA|LwWzG zsfy(b9J88Wes86}Xjl$fO90|j!u0#cEx^EZb4Xq_4E_1d+LmT!1nXkz;y8fi`7E~o z1hG6LZ2DymA(Ts*zhSI!m+A`NKT%I4dDZpEwdpnd zv#_uL!K7z*1KLaqGF`bL%<71lY@|FLml41?4cPFx25CqFV@10pgn^C z0_KRfP=n_8@EQPyrIK_-MmM&oqI0To1Nj($c8)Ab)2o3VPd)|+@XMe3;k&PibD+f( z7et>8h=6DXQ>>D&tsQX4ix~{NkkKt@JMa3}u_OvAtP+*;{GNL42_%jU#Vd1+yhO4OKfY67Q58H(zF4-64y z<+A}r`Gb_Ia9*rKHu(R)9nkoslPFLDa%PZ}EuvJ!HAa2LBR(7VOP3yv$$NDA72oNY z+0?e`EVdQHG2eMv6SLrF#dDzmWg#Dflm%<^AcXW|4OtvIcl*HOtZE!`I1R2{ZU$y+ z$k_p%;;-7kqVfRJ`3@=P9dcc?UxIXAmsC<53(Cb%L52M@@uQHt9gTM4%5vd@EMR3x ztMq900fTrRm{o1c28C-Uq}8nm8E|*3J|OwF;u~VXi-Ulmk}r^v=5{dpoTW(@E5=uS ztM-I+Ic&Vr5o}@n7a=b`6PRb6mKX<*3;Yf}3qXKW{F5gEA>%mO601%I16WB$w9tU| z4ZKBl!|SP=fht+&394jlo7aQTcxhX`Vus7ElW*v_6P`TDQ@rO6p$ih*w&3A9zv`s+ z$f)IOZrWA@94)Cs3uj=?)CFfta=p+0(b&OR56m5MTHXhq+cAlb%*W;lcUD%-BXic`fD zI9&4xiL+ikl(hdtFDuB||94V&!Vv4XH}{8ueb-eB7uat@H;!0pXm@dcsr zoG|&b$Nsm2)jxdwXL^tTvOM-?1DZXR#sJ!JfS6Rpd_l0$69)D<=hVgR+YL5r9kytx zGG)rJ)gmCVaKxF{jJJ{7pnhWwNgr_Hv?$N_y;~=C)w*;-+I??z26T0 z_L!0M8u>K{1VZ}g5#09(#EPc~gyhXt{{XM(%h+dtUn|d=7~v3N=-)$naySC99dQ)* zwS`yAXb0JO?21s#8}LxfyHWmR`{N73Ij=W$VH>2BW2A$+b}Zy!4_(jHO;k}IZvI?5 zG%)FGv##5{4Z^1d4g*?7C#1HV4}I7-^i}6)t$El*Io+LW_UTdXc^ixgg6#Jin^kzm z6=!iVf8XUl&z?YmyL@=GwY7CU`^1S8 z>)EGX%EGsNXa~4M*DW31ObyjL9kYzjm0fhr{=Pf?k1g9MNLmJ;92Nf)rb*7KhI)%4 z46n8_zi~L$%Din;Qce>3tb4#01lLCny9us7Q!mm}DECL@-%w9!m+m6$<#`yCO(c}2 zr*Pux(^G7MxfS{IkEIo|_Pe(?4=FvT_OD(}nQyiBN1V!{IcX76$sW3dz3d{Mij}!= zo2HdHvR-b>8!FZAeifA(jj9IAz$r;-xm%u|(p6%OW?!&uRmoNvkEBq9-q?`Ho~$n)3;4E2r3e`2i#(2l%%Q4W4}wma1xMMmQ3Q zFQq?mJ<7K)jJ(*>QA{!_V`W%#1ss0nTkpk)?|^XZ_8ukJ3u=i0Q{~w4=IqDy&LzFo z@*%J5Vh<`kqSJ-Z+{N?O)@^%ZjUXk_V*a?kQ$(@2?nxw&*=t|v^~W+a{n!nXTO)gmt~yi4YK^@ODP ztcT?47Ym|a&sKZC{c}-_#lCWe{6f~%(bk!fT&7`}W$9$Z%rHA^=qS8CxwZlGeRMh< zd5PaaV%F7(ddT8FHL@-Svk{3BO#}%R7ETD{U?u#-ogthJKX%}AbY{^|>OeeMA8qH= z_2agKSJT0dJwudcFLafy+YX7&sZQH*ANCB}9>k`Wvfzt|;1o-30z zyL|cbIXA@}#J!SWVU3exJdB;3oNy)cwZyT(LFfMDO;8Mf-Z!ckhmRxy#W{iMN}N&4 zUs$20#Jg2{Rr(x$G~NbmUdjuoaLaDslR0TZla7B;Gj!znoXGxuK~9pqH_iWvU3QuE zSysQjay=)*?hVl>hI=|JY4CpSFOQ$O)90am3?I>wt)bLb8Q3RdrHvvj%c~ zs}_X25LJ|$zjP%x`M3zZyu+)ok?vn@^Zu|*ir^lQ4!sfr zZSN~Rkgm_n-YHmErItWWIe5tp-p5b_#<;aV%Wg6{?dC!t+@{pW@)dgOn%%@(kriK? ze!QSl=}l6gmYq|(4*OR;Q;+lr#XSGtS_#a9RmFF{f7$NWy7gYDWwC|ounp_tt@UJPELnv&9>Fw|5%imKQv>MmW zJ3~zuuV(59b>793EQ`m4?S#FS-R1F6K$z^tSg=z8U+m6wd{A3FiOg0V?^Zsxi(`9t z!Cygfyc#NDiB7K9vf8;2McX-o8kA-4KJb>6v>9L{Tw|>C7YTJW`EP8jqjw)TpOXYv z@q3LfJnUd)4(;U65hstw{oRwmA2Mb60Ni?6zS~;!V1kv08Kw>M69!YS5sty!$812R zSYCjrI8`GDR+gZJ9H2g6d-nG?9NU0;bi~ z=Abs#`TY83vEO8+a@Nopm{_K40Ca2yCEGpo9X5I z3ua-o8GF_fD!p~TR#*5Mh`%;jTUl+9lRIf=7fMOXDqVPVTh+C0U?bFiRIX0dYI8|k zeHt)U99!&F#umOyibi+ii9QXsq>d&Ir^Hki zMxbADMtv2EyvP%YL?FNf0E_~zSQO2fPI}U?4GFK0R_NlE&T1De`8FDn3|2+yEP$th zSd!iALOY4~R|v7Q#Y3rSn>KAip9L!)FC1~wTsKqYWxfRpq?th$kJ7k`$gTS?G#8VI zCUw6Q1@YbWO_>bjTb{L&n`Kng*|V5%VKRphS^+AmwCN^#CHcebXQVjWMqMR z$3nX&GXt>Vbty%isT$2N-Vvh;SYwlX0K=*k4L$-Kr;08WjuL69D-T0?(Q2rws&b67 zodxu~8+~=8`BLSssJsbv7)rfoM_M#BHD!_GzFdJjeTKzSd|iA8dROJ+FnynnD{T7Q z0I75;mTgZKcG+Wfbe^S>6D;7*tqeEQpXW2g!g8z`9xr6Gi5*49p}#1|*zt?lGt<)w z^TXVUK<#wSnQ!2C)IM;E^A-#Fw1o}gUc4hn{(smufNJPr9;j?EvHl1q*24L0Fwp)c z$}mJ4l)-Z$UC)JE@gg&C9||c@j>=sUuRh}v%dL0!M|hD8hNM}H6U5-Maiy<5S$6t` z@TjQ`bHoEYfMDqhQ%98&Brb22^0VkldsVS&VR{fJ%LdYw4U?$nPj{9 zmdv`mjLf`5!zaQO5);NBj~YIhFD-o2WDva|cS&vlcJYbw3PUyTZ3(pe-K#uWpY38H zh>;=(Ro;?z)8|jKEO59d8E~RAqM0R@zMFw=!~D3OoG0-Y==5J{e8DlM>jJ$9CeZaB zTbU2Prk%rM3^(NhU#9J)1A_&JE&S_k7bN4f0HR38vSr$+aHJCOcu^M5A$)=EG z5c#fFN|p_y#cVR?G{L-|>5zKGo8igoca!<4`cL8VgZI^6>PP9al6_2D(*sPt z+nK$Dy=a(~ae-6IG`Ut|)jS8?qmQMJ53#2rn-Y=!%PVioL`5OJ`Oib*T=arPzq1dz%Mi zaY7R-6D0B##8B(Uo65L15rzLYD}6u>zMoF^oCAQtSZK;ZcTZNUaSPnqs_7%ouS;U* zUdW)ke^{$3r>JO`_-YjdE&cPIQdqB7(%M?`A@SnH0fuNM>)?R{qA3h$dgDQXfpGx~ z?*R17RNIRthqk@8-|`6QkWn6oJU^F@Q zYU|K8L%1V00oMk!b$KMI{ZfTlz+^aCFc=Fw7^WT{SC$xMR|I(KxLz^*BS z;yG?s$z&Dygq)0w(SzLiI>3kvP5OcG7hE^TBo3MvGXh3 zNPA%}jYeDTG@<(Vd72?4LrZl^aV|T{vLG^@Sr%n4N>V75d5NMU0{wpDl6|`mum;)p z=MHPpb!S$Z~+S>d|vw$zr zoT)f|yGON3t?rUZk-;mV(MQY4$Ghu|P>?|t@6{bF3(PBkyJJU{V;f^6;UVdwmfd0) z!oCiyYv{Ri&d!5l#p9)Xj<0w+8Ea4$qRsJQSvmE^jIV+-{Fs+TTsajVs=i7ILOpOD z5to;r@87G0I;zuxd=Hmz!pGI)z}MB+i^aSDv2Wi#l%Tnye_+6Vin?1^;SYfnKvfQ1 z&}EESfSgF{#zPwv>wsMc)z4_<2*@B2&D`1cdDOaF%f|k6bq$Cq7 z_IvLaQbz&OKO4!Zj`N>wDJUqQ`|{%e^dqxf8j=WE^!;dH2PO<>F-ligdxPe;i zj4GW@jPh*(3C|;qbK>Bil#~<(;N7&#iehy=aPSmf(x*b4e`iMa*_m|+eAqZcEIO_q z3VU5kQT_i8s305e`CS-0sP|(kA>XkiMU*%O&I}IwgChl`MkJ;YLi<*1VGNKv*=;T) zgZ^@qnKg9fZLAzPVkra;#%+cnF_>cb#2+Q`F@*1f8zBrIzx)GsBcu(TS{uJ@wNQe| z1I#BF9ZU=ugpnb4^Y*cd)uHwVCgcbL1SO5_2@qD_AG}{lg~uL%%M!hlH<#1-AC$bW z*4A8=-kAxSma$FsTSjB7E?Wa=l1}3T5C}Yj!6!g47~l2b$r7KwKGM(Zxya#XLx)JN z`w4r{-;XyLa_DPHmMtMqq-twpBbO#m%o6`jt6fpfbZjY5kI;=G@tkr4a~NS74|F3P z#l0Tgt(|Yqf($|vXmDfv!*?aV`PlJp8OTVLsO|mJ^SnM=LkYySQ-IGxFP$+TIjVcK z`s0xb+|Rw52#~=x12YwL%S#@jJmj3+imT5{p}-R#Cq1Fj+yLirZacx1%%M~F@lL<8 zIt&#TzDUH4l-pI@QxugGKH-m_s0|BX*<@an) vf|b~-JoJYAr?7feEiZQZLq-0veF?Fz%?;<(SCODpB90my!)1PR`iFl4na*Y7 literal 0 HcmV?d00001 diff --git a/dev/canonicalization/59f6b920.png b/dev/canonicalization/59f6b920.png deleted file mode 100644 index 7bf5c4d51e794871645b681767d30e0d1c90ea5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9901 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 O95*?I$^YT}^?wJ=SaqWS diff --git a/dev/canonicalization/8c33a1d9.png b/dev/canonicalization/8c33a1d9.png new file mode 100644 index 0000000000000000000000000000000000000000..5d64490da60ab80571a0cc3508cbe8b127ba9ce5 GIT binary patch literal 9818 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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 952ef5a10..ee825ed5c 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 a052b3238..ddbe12db9 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 b3d183ead..e66e25307 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}:
- 0  1  1  0  1  1
- 0  0  0  0  0  0
- 1  1  1  1  1  0
- 1  0  0  0  0  1
+ 0 0 0 1 1 0 + 0 0 1 0 0 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 233193db0..a9674df24 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 9587c2665..c165694ae 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 7ad86fd4c..b475808da 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 f2693ceee..b1bb84b27 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 9632a0828..288e4f0a8 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 072f2ce96..c78a32d7f 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 b38c6be7b..271bea4ea 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:
+  continue:CircuitStatus(0)      => 0.0
   false_success:CircuitStatus(2) => 9.0
   failure:CircuitStatus(3)       => 4.0
-  continue:CircuitStatus(0)      => 0.0
-  true_success:CircuitStatus(1)  => 487.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.

+ true_success:CircuitStatus(1) => 487.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 b6dab7c59..f830dc090 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 bc5a0c0ca..b9b4b8e98 100644 --- a/dev/noisycircuits_perturb/index.html +++ b/dev/noisycircuits_perturb/index.html @@ -20,4 +20,4 @@ petrajectories(initial_state, circuit)
Dict{CircuitStatus, Float64} with 3 entries:
   false_success:CircuitStatus(2) => 0.019406
   failure:CircuitStatus(3)       => 0.0129373
-  true_success:CircuitStatus(1)  => 0.967065

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.

+ true_success:CircuitStatus(1) => 0.967065

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/34cc14b5.svg b/dev/plotting/256a1663.svg similarity index 98% rename from dev/plotting/34cc14b5.svg rename to dev/plotting/256a1663.svg index c95b14ecf..a11a861a7 100644 --- a/dev/plotting/34cc14b5.svg +++ b/dev/plotting/256a1663.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 290c3a4fa..2d782536f 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

  • Aaronson, S. and Gottesman, D. (2004). Improved simulation of stabilizer circuits. Physical Review A 70, 052328.
  • Abbe, E.; Shpilka, A. and Ye, M. (2020). Reed–Muller codes: Theory and algorithms. IEEE Transactions on Information Theory 67, 3251–3277.
  • Audenaert, K. M. and Plenio, M. B. (2005). Entanglement on mixed stabilizer states: normal forms and reduction procedures. New Journal of Physics 7, 170.
  • Bose, R. C. and Ray-Chaudhuri, D. K. (1960). Further results on error correcting binary group codes. Information and Control 3, 279–290.
  • Bose, R. C. and Ray-Chaudhuri, D. K. (1960). On a class of error correcting binary group codes. Information and control 3, 68–79.
  • Bravyi, S. and Maslov, D. (2021). Hadamard-free circuits expose the structure of the Clifford group. IEEE Transactions on Information Theory 67, 4546–4563.
  • Calderbank, A. R.; Rains, E. M.; Shor, P. and Sloane, N. J. (1998). Quantum error correction via codes over GF (4). IEEE Transactions on Information Theory 44, 1369–1387.
  • Chao, R. and Reichardt, B. W. (2017). Quantum Error Correction with Only Two Extra Qubits. Physical review letters 121 5, 050502.
  • Cleve, R. and Gottesman, D. (1997). Efficient computations of encodings for quantum error correction. Physical Review A 56, 76.
  • Djordjevic, I. B. (2021). Quantum information processing, quantum computing, and quantum error correction: an engineering approach (Academic Press).
  • Fowler, A. G.; Mariantoni, M.; Martinis, J. M. and Cleland, A. N. (2012). Surface codes: Towards practical large-scale quantum computation. Physical Review A 86, 032324.
  • Garcia, H. J.; Markov, I. L. and Cross, A. W. (2012). Efficient inner-product algorithm for stabilizer states, arXiv preprint arXiv:1210.6646.
  • Gottesman, D. (1996). Class of quantum error-correcting codes saturating the quantum Hamming bound. Physical Review A 54, 1862.
  • Gottesman, D. (1997). Stabilizer codes and quantum error correction. Ph.D. Thesis, California Institute of Technology.
  • Gottesman, D. (1998). The Heisenberg representation of quantum computers. In: International Conference on Group Theoretic Methods in Physics (Citeseer).
  • Grassl, M. (2002). Algorithmic aspects of quantum error-correcting codes. Mathematics of Quantum Computation, 223–252.
  • Grassl, M. (2011). Variations on encoding circuits for stabilizer quantum codes. In: International Conference on Coding and Cryptology (Springer); pp. 142–158.
  • Gullans, M. J.; Krastanov, S.; Huse, D. A.; Jiang, L. and Flammia, S. T. (2020). Quantum coding with low-depth random circuits, arXiv preprint arXiv:2010.09775.
  • Hocquenghem, A. (1959). Codes correcteurs d'erreurs. Chiffers 2, 147–156.
  • Knill, E. and Laflamme, R. (1996). Concatenated quantum codes, arXiv preprint quant-ph/9608012.
  • Koenig, R. and Smolin, J. A. (2014). How to efficiently select an arbitrary Clifford group element. Journal of Mathematical Physics 55, 122202.
  • Krastanov, S.; de la Cerda, A. S. and Narang, P. (2020). Heterogeneous Multipartite Entanglement Purification for Size-Constrained Quantum Devices, arXiv preprint arXiv:2011.11640.
  • Li, Y.; Chen, X. and Fisher, M. P. (2019). Measurement-driven entanglement transition in hybrid quantum circuits. Physical Review B 100, 134306.
  • Lin, S. and Costello, D. (2024). Error Control Coding (Pearson).
  • MacKay, D. J.; Mitchison, G. and McFadden, P. L. (2004). Sparse-graph codes for quantum error correction. IEEE Transactions on Information Theory 50, 2315–2330.
  • Muller, D. E. (1954). Application of Boolean algebra to switching circuit design and to error detection. Transactions of the IRE professional group on electronic computers, 6–12.
  • Nahum, A.; Ruhman, J.; Vijay, S. and Haah, J. (2017). Quantum Entanglement Growth under Random Unitary Dynamics. Physical Review X 7, 031016.
  • Raaphorst, S. (2003). Reed-muller codes. Carleton University, May 9.
  • Reed, I. S. (1954). A class of multiple-error-correcting codes and the decoding scheme. IEEE Transactions on Information Theory 4, 38–49.
  • Steane, A. M. (2007). A tutorial on quantum error correction. In: PROCEEDINGS-INTERNATIONAL SCHOOL OF PHYSICS ENRICO FERMI, Vol. 162 (IOS Press; Ohmsha; 1999); p. 1.
  • Van Den Berg, E. (2021). A simple method for sampling random Clifford operators. In: 2021 IEEE International Conference on Quantum Computing and Engineering (QCE) (IEEE); pp. 54–59.
  • Wilde, M. M. (2009). Logical operators of quantum codes. Physical Review A 79, 062322.
  • Yu, S.; Bierbrauer, J.; Dong, Y.; Chen, Q. and Oh, C. H. (2013). All the Stabilizer Codes of Distance 3. IEEE Transactions on Information Theory 59, 5179–5185.
+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

  • Aaronson, S. and Gottesman, D. (2004). Improved simulation of stabilizer circuits. Physical Review A 70, 052328.
  • Abbe, E.; Shpilka, A. and Ye, M. (2020). Reed–Muller codes: Theory and algorithms. IEEE Transactions on Information Theory 67, 3251–3277.
  • Audenaert, K. M. and Plenio, M. B. (2005). Entanglement on mixed stabilizer states: normal forms and reduction procedures. New Journal of Physics 7, 170.
  • Bose, R. C. and Ray-Chaudhuri, D. K. (1960). Further results on error correcting binary group codes. Information and Control 3, 279–290.
  • Bose, R. C. and Ray-Chaudhuri, D. K. (1960). On a class of error correcting binary group codes. Information and control 3, 68–79.
  • Bravyi, S. and Maslov, D. (2021). Hadamard-free circuits expose the structure of the Clifford group. IEEE Transactions on Information Theory 67, 4546–4563.
  • Calderbank, A. R.; Rains, E. M.; Shor, P. and Sloane, N. J. (1998). Quantum error correction via codes over GF (4). IEEE Transactions on Information Theory 44, 1369–1387.
  • Chao, R. and Reichardt, B. W. (2017). Quantum Error Correction with Only Two Extra Qubits. Physical review letters 121 5, 050502.
  • Cleve, R. and Gottesman, D. (1997). Efficient computations of encodings for quantum error correction. Physical Review A 56, 76.
  • Djordjevic, I. B. (2021). Quantum information processing, quantum computing, and quantum error correction: an engineering approach (Academic Press).
  • Fowler, A. G.; Mariantoni, M.; Martinis, J. M. and Cleland, A. N. (2012). Surface codes: Towards practical large-scale quantum computation. Physical Review A 86, 032324.
  • Garcia, H. J.; Markov, I. L. and Cross, A. W. (2012). Efficient inner-product algorithm for stabilizer states, arXiv preprint arXiv:1210.6646.
  • Gottesman, D. (1996). Class of quantum error-correcting codes saturating the quantum Hamming bound. Physical Review A 54, 1862.
  • Gottesman, D. (1997). Stabilizer codes and quantum error correction. Ph.D. Thesis, California Institute of Technology.
  • Gottesman, D. (1998). The Heisenberg representation of quantum computers. In: International Conference on Group Theoretic Methods in Physics (Citeseer).
  • Grassl, M. (2002). Algorithmic aspects of quantum error-correcting codes. Mathematics of Quantum Computation, 223–252.
  • Grassl, M. (2011). Variations on encoding circuits for stabilizer quantum codes. In: International Conference on Coding and Cryptology (Springer); pp. 142–158.
  • Gullans, M. J.; Krastanov, S.; Huse, D. A.; Jiang, L. and Flammia, S. T. (2020). Quantum coding with low-depth random circuits, arXiv preprint arXiv:2010.09775.
  • Hocquenghem, A. (1959). Codes correcteurs d'erreurs. Chiffers 2, 147–156.
  • Knill, E. and Laflamme, R. (1996). Concatenated quantum codes, arXiv preprint quant-ph/9608012.
  • Koenig, R. and Smolin, J. A. (2014). How to efficiently select an arbitrary Clifford group element. Journal of Mathematical Physics 55, 122202.
  • Krastanov, S.; de la Cerda, A. S. and Narang, P. (2020). Heterogeneous Multipartite Entanglement Purification for Size-Constrained Quantum Devices, arXiv preprint arXiv:2011.11640.
  • Li, Y.; Chen, X. and Fisher, M. P. (2019). Measurement-driven entanglement transition in hybrid quantum circuits. Physical Review B 100, 134306.
  • Lin, S. and Costello, D. (2024). Error Control Coding (Pearson).
  • MacKay, D. J.; Mitchison, G. and McFadden, P. L. (2004). Sparse-graph codes for quantum error correction. IEEE Transactions on Information Theory 50, 2315–2330.
  • Muller, D. E. (1954). Application of Boolean algebra to switching circuit design and to error detection. Transactions of the IRE professional group on electronic computers, 6–12.
  • Nahum, A.; Ruhman, J.; Vijay, S. and Haah, J. (2017). Quantum Entanglement Growth under Random Unitary Dynamics. Physical Review X 7, 031016.
  • Raaphorst, S. (2003). Reed-muller codes. Carleton University, May 9.
  • Reed, I. S. (1954). A class of multiple-error-correcting codes and the decoding scheme. IEEE Transactions on Information Theory 4, 38–49.
  • Steane, A. M. (2007). A tutorial on quantum error correction. In: PROCEEDINGS-INTERNATIONAL SCHOOL OF PHYSICS ENRICO FERMI, Vol. 162 (IOS Press; Ohmsha; 1999); p. 1.
  • Van Den Berg, E. (2021). A simple method for sampling random Clifford operators. In: 2021 IEEE International Conference on Quantum Computing and Engineering (QCE) (IEEE); pp. 54–59.
  • Wilde, M. M. (2009). Logical operators of quantum codes. Physical Review A 79, 062322.
  • Yu, S.; Bierbrauer, J.; Dong, Y.; Chen, Q. and Oh, C. H. (2013). All the Stabilizer Codes of Distance 3. IEEE Transactions on Information Theory 59, 5179–5185.
diff --git a/dev/stab-algebra-manual/index.html b/dev/stab-algebra-manual/index.html index bc78d785b..cc4063c60 100644 --- a/dev/stab-algebra-manual/index.html +++ b/dev/stab-algebra-manual/index.html @@ -293,4 +293,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 303ea410b..ba1e45dc1 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