From 1da5d05afcf5f63210fbc6b46bcd463946aefcb6 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Mon, 22 Jan 2024 16:22:39 +0000 Subject: [PATCH] build based on ab74d25 --- dev/.documenter-siteinfo.json | 2 +- dev/API/index.html | 104 ++++++++++---------- dev/ECC_API/index.html | 6 +- dev/ECC_evaluating/6ba2660e.png | Bin 0 -> 49995 bytes dev/ECC_evaluating/7b8254ae.png | Bin 49901 -> 0 bytes dev/ECC_evaluating/b594f346.png | Bin 0 -> 40096 bytes dev/ECC_evaluating/ba3592d9.png | Bin 40163 -> 0 bytes dev/ECC_evaluating/index.html | 4 +- dev/allops/index.html | 2 +- dev/canonicalization/10984993.png | Bin 0 -> 9771 bytes dev/canonicalization/180c641f.png | Bin 9451 -> 0 bytes dev/canonicalization/2a5f0055.png | Bin 9727 -> 0 bytes dev/canonicalization/6f9492c2.png | Bin 0 -> 9357 bytes dev/canonicalization/7937310a.png | Bin 9483 -> 0 bytes dev/canonicalization/b503ae46.png | Bin 0 -> 9489 bytes dev/canonicalization/e12c0cf3.png | Bin 9404 -> 0 bytes dev/canonicalization/fb4bb557.png | Bin 0 -> 9299 bytes dev/canonicalization/index.html | 8 +- dev/commonstates/index.html | 2 +- dev/datastructures/index.html | 2 +- dev/ecc_example_sim/index.html | 6 +- 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 | 6 +- dev/noisycircuits_ops/index.html | 2 +- dev/noisycircuits_perturb/index.html | 4 +- dev/plotting/{93d072b1.svg => 4a7c1627.svg} | 12 +-- dev/plotting/{cb36b6ed.svg => 69b8bb04.svg} | 12 +-- dev/plotting/{ce52d25b.svg => a7adbf96.svg} | 12 +-- dev/plotting/{c1ef9ef4.svg => c1628a8e.svg} | 12 +-- dev/plotting/{3d910bb9.svg => ef4e99bf.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, 119 insertions(+), 119 deletions(-) create mode 100644 dev/ECC_evaluating/6ba2660e.png delete mode 100644 dev/ECC_evaluating/7b8254ae.png create mode 100644 dev/ECC_evaluating/b594f346.png delete mode 100644 dev/ECC_evaluating/ba3592d9.png create mode 100644 dev/canonicalization/10984993.png delete mode 100644 dev/canonicalization/180c641f.png delete mode 100644 dev/canonicalization/2a5f0055.png create mode 100644 dev/canonicalization/6f9492c2.png delete mode 100644 dev/canonicalization/7937310a.png create mode 100644 dev/canonicalization/b503ae46.png delete mode 100644 dev/canonicalization/e12c0cf3.png create mode 100644 dev/canonicalization/fb4bb557.png rename dev/plotting/{93d072b1.svg => 4a7c1627.svg} (99%) rename dev/plotting/{cb36b6ed.svg => 69b8bb04.svg} (98%) rename dev/plotting/{ce52d25b.svg => a7adbf96.svg} (98%) rename dev/plotting/{c1ef9ef4.svg => c1628a8e.svg} (98%) rename dev/plotting/{3d910bb9.svg => ef4e99bf.svg} (99%) diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 65ee192e4..535f0ade3 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.10.0","generation_timestamp":"2024-01-22T08:22:52","documenter_version":"1.2.1"}} \ No newline at end of file +{"documenter":{"julia_version":"1.10.0","generation_timestamp":"2024-01-22T16:22:33","documenter_version":"1.2.1"}} \ No newline at end of file diff --git a/dev/API/index.html b/dev/API/index.html index ad1ec8f60..926be95e9 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 funcitonality 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}}}}, Matrix{Bool}}
-

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.commMethod

Check whether two operators commute.

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

julia> P"XX"*P"ZZ", P"ZZ"*P"XX"
+
source
QuantumClifford.commMethod

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
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
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 utilies 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 mesurements

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 mesurements

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_pauliMethod

A random Pauli operator on n qubits.

Use realphase=true to get operators with phase ±1 (excluding ±i). nophase=true sets the phase to +1.

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, Y, or Z, each with probability p. Useful for simulating Pauli noise.

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_pauliMethod

A random Pauli operator on n qubits.

Use realphase=true to get operators with phase ±1 (excluding ±i). nophase=true sets the phase to +1.

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, Y, or Z, each with probability p. Useful for simulating Pauli noise.

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 lenght(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 4e05ea52d..1da01c9ec 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.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.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.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
++ ZZZZ
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.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.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())
 𝒟ℯ𝓈𝓉𝒶𝒷━━━━━
@@ -125,7 +125,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
@@ -137,4 +137,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/6ba2660e.png b/dev/ECC_evaluating/6ba2660e.png new file mode 100644 index 0000000000000000000000000000000000000000..83040f259592fe162a392194ea12969610b3aba5 GIT binary patch literal 49995 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%0DCN78gaW1>q_CeHSmIGqxvN01*UV(h+i(9 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⁣Ql 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 diff --git a/dev/ECC_evaluating/index.html b/dev/ECC_evaluating/index.html index 6ef497398..af5b64d67 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 542740a0e..efa85e85d 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/10984993.png b/dev/canonicalization/10984993.png new file mode 100644 index 0000000000000000000000000000000000000000..07980aa481feb327844853b8eab1822dc76ebe79 GIT binary patch literal 9771 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 BFG~Ob diff --git a/dev/canonicalization/2a5f0055.png b/dev/canonicalization/2a5f0055.png deleted file mode 100644 index bcfb429e4e4802ab224f2af3b75d43c1c9e9ba63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9727 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 diff --git a/dev/canonicalization/6f9492c2.png b/dev/canonicalization/6f9492c2.png new file mode 100644 index 0000000000000000000000000000000000000000..97592dfbaab3adbf3f5ac79265592986ee082906 GIT binary patch literal 9357 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 literal 0 HcmV?d00001 diff --git a/dev/canonicalization/7937310a.png b/dev/canonicalization/7937310a.png deleted file mode 100644 index d958f81a166f31639e9ec8eb4bcf0b3ccf93945f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9483 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 diff --git a/dev/canonicalization/b503ae46.png b/dev/canonicalization/b503ae46.png new file mode 100644 index 0000000000000000000000000000000000000000..25477ed869862b3e680a2c2399cfaaa305622ed6 GIT binary patch literal 9489 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 P3}oMK$6ducy<`6Y4XmK~ literal 0 HcmV?d00001 diff --git a/dev/canonicalization/e12c0cf3.png b/dev/canonicalization/e12c0cf3.png deleted file mode 100644 index 9bff10211c4bb114112990ea4428998b75ac3617..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9404 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 DjC$wE literal 0 HcmV?d00001 diff --git a/dev/canonicalization/index.html b/dev/canonicalization/index.html index cd94d67fe..71ab4561c 100644 --- a/dev/canonicalization/index.html +++ b/dev/canonicalization/index.html @@ -2,13 +2,13 @@ Canonicalization · 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 e1562d2fd..9901ce1e5 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 bf86952fb..1261a125b 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 peform 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 peform 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 6612d2576..be7be21a1 100644 --- a/dev/ecc_example_sim/index.html +++ b/dev/ecc_example_sim/index.html @@ -21,6 +21,6 @@ fullcircuit = [ecirc..., errors..., scirc...]Example block output

And running this noisy simulation:

frames = pftrajectories(fullcircuit; trajectories=nframes)
 pfmeasurements(frames)
4×6 Matrix{Bool}:
  0  0  0  0  0  0
- 1  1  1  0  0  0
- 0  1  1  1  0  0
- 1  0  0  1  0  1
+ 0 0 0 0 0 0 + 0 1 1 0 0 0 + 0 1 1 1 0 1 diff --git a/dev/graphs/index.html b/dev/graphs/index.html index 7ed8d32ca..e26711496 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 c7d65550e..766252b14 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 ea3e688be..67257a93a 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 fe73a07db..b89870349 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 5eb8477f8..7823c8d21 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 f1ec641b2..da06a3861 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 e06b60120..2d7827086 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:
-  true_success:CircuitStatus(1)  => 459.0
   continue:CircuitStatus(0)      => 0.0
-  false_success:CircuitStatus(2) => 23.0
-  failure:CircuitStatus(3)       => 18.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) => 459.0 + failure:CircuitStatus(3) => 18.0 + false_success:CircuitStatus(2) => 23.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 f258e785d..9d2ab8a96 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 1da1d1a8e..56e2a8051 100644 --- a/dev/noisycircuits_perturb/index.html +++ b/dev/noisycircuits_perturb/index.html @@ -19,5 +19,5 @@ petrajectories(initial_state, circuit)
Dict{CircuitStatus, Float64} with 3 entries:
   true_success:CircuitStatus(1)  => 0.903546
-  false_success:CircuitStatus(2) => 0.0547604
-  failure:CircuitStatus(3)       => 0.0365069

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.

+ failure:CircuitStatus(3) => 0.0365069 + false_success:CircuitStatus(2) => 0.0547604

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/93d072b1.svg b/dev/plotting/4a7c1627.svg similarity index 99% rename from dev/plotting/93d072b1.svg rename to dev/plotting/4a7c1627.svg index 86efa1b2d..8c9424e6f 100644 --- a/dev/plotting/93d072b1.svg +++ b/dev/plotting/4a7c1627.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 9d49fe682..2599625f5 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):

References

+Suggested Readings & References · QuantumClifford.jl

Suggested reading

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

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

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

These publications describe the uniform sampling of random stabilizer states:

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

References

diff --git a/dev/stab-algebra-manual/index.html b/dev/stab-algebra-manual/index.html index 94665e01d..a8f30fa71 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 5a6f9141d..3c666326c 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