Pauli Algebra
Pauli operations
LinearAlgebra.tr — Method
LinearAlgebra.tr(psum::AbstractPauliSum)Compute the trace of an AbstractPauliSum operator.
The trace is a linear operation: Tr(A + B) = Tr(A) + Tr(B). Since individual non-identity PauliString terms have a trace of zero (as per tr(::PauliString)), only the coefficient of the identity operator contributes to the total trace of a PauliSum.
The coefficient of the identity term (0x00) is retrieved from this mapping using get(psum.terms, 0x00, 0). This coefficient is then multiplied by 2^nqubits(psum) (the dimension of the Hilbert space). If the identity term (0x00) is not explicitly present in psum.terms, its coefficient is implicitly zero, resulting in a total trace of 0.0.
Arguments
psum::PauliSum: The Pauli sum to trace.
Returns
CT: The trace value of the PauliSum.
LinearAlgebra.tr — Method
LinearAlgebra.tr(pstr::PauliString)Compute the trace of a PauliString operator.
The trace of any non-identity Pauli operator (e.g., X, Y, Z, or their tensor products) is zero. The identity operator I has a trace equal to the dimension of the Hilbert space, 2^N, where N is the number of qubits.
A PauliString represents a single term, typically of the form coeff * P_1 P_2 ... P_N. If the pstr.term bitmask is 0x00, it signifies the identity operator across all pstr.nqubits. In this case, the trace is pstr.coeff * 2^pstr.nqubits. For any other pstr.term value (representing a non-identity Pauli operator), the trace is 0.0.
Arguments
pstr::PauliString: The Pauli string to trace.
Returns
CT: The trace value of thePauliString.
PauliPropagation.commutator — Method
commutator(pstr1::Integer, pstr2::Integer)Calculate the commutator of two integer Pauli strings. Returns a tuple of the coefficient and the potentially integer Pauli string. The coefficient is zero if the Pauli strings commute.
PauliPropagation.commutator — Method
commutator(pstr1::PauliString, pstr2::PauliString)Calculate the commutator of two PauliStrings.
PauliPropagation.commutator — Method
commutator(psum::PauliSum, pstr::PauliString)
commutator(pstr::PauliString, psum::PauliSum)Calculate the commutator of a PauliSum and a PauliString.
PauliPropagation.commutator — Method
commutator(psum1::PauliSum, psum2::PauliSum)Calculate the commutator of two PauliSums.
PauliPropagation.commutator — Method
commutator(vpsum1::VectorPauliSum, vpsum2::VectorPauliSum)Calculate the commutator of two VectorPauliSums. Returns a VectorPauliSum with complex coefficients.
Example
vpsum = VectorPauliSum(3, [1, 2], [1.]) # 1.0 * X + 1.0 * Y
vpsum2 = VectorPauliSum(3, [7], [0.25]) # 0.25 * ZX
commutator(vpsum, vpsum2) # should return a VectorPauliSum with - 0.5 YX + 0.5 XXPauliPropagation.commutes — Method
commutes(pstr1::Integer, pstr2::Integer)Check if two integer Pauli strings commute.
PauliPropagation.commutes — Method
commutes(pstr1::PauliString, pstr2::PauliString)Check if two Pauli strings of type PauliString commute.
PauliPropagation.commutes — Method
commutes(psum1::PauliSum, psum2::PauliSum)Check if two Pauli sums of type PauliSum commute.
PauliPropagation.containsXorY — Method
containsXorY(pstr::Integer)Check if an integer Pauli string contains an X or Y Pauli.
PauliPropagation.containsXorY — Method
containsXorY(pstr::PauliString)Check if a Pauli string contains an X or Y Pauli.
PauliPropagation.containsYorZ — Method
containsYorZ(pstr::Integer)Check if an integer Pauli string contains a Y or Z Pauli.
PauliPropagation.containsYorZ — Method
containsXorY(pstr::PauliString)Check if a Pauli string contains a Y or Z Pauli.
PauliPropagation.countweight — Method
countweight(pstr::Integer)Function to count the weight of an integer Pauli string.
PauliPropagation.countweight — Method
countweight(pstr::PauliString)Function to count the weight of a PauliString.
PauliPropagation.countweight — Method
countweight(psum::PauliSum)Function to count the weight Pauli strings in a PauliSum. Returns an array of weights.
PauliPropagation.countx — Method
countx(pstr::Integer)Function to count the number of X Paulis in an integer Pauli string.
PauliPropagation.countx — Method
countx(pstr::PauliString)Function to count the number of X Paulis in a PauliString.
PauliPropagation.countx — Method
countx(psum::PauliSum)Function to count the number of X Paulis in a PauliSum. Returns an array of counts.
PauliPropagation.countxy — Method
countxy(pstr::Integer)Function to count the number of X and Y Paulis in an integer Pauli string.
PauliPropagation.countxy — Method
countxy(pstr::PauliString)Function to count the number of X and Y Paulis in a PauliString.
PauliPropagation.countxy — Method
countxy(psum::PauliSum)Function to count the number of X and Y Paulis in a PauliSum. Returns an array of counts.
PauliPropagation.county — Method
county(pstr::Integer)Function to count the number of Y Paulis in an integer Pauli string.
PauliPropagation.county — Method
county(pstr::PauliString)Function to count the number of Y Paulis in a PauliString.
PauliPropagation.county — Method
county(psum::PauliSum)Function to count the number of Y Paulis in a PauliSum. Returns an array of counts.
PauliPropagation.countyz — Method
countyz(pstr::Integer)Function to count the number of Y and Z Paulis in an integer Pauli string.
PauliPropagation.countyz — Method
countyz(pstr::PauliString)Function to count the number of Y and Z Paulis in a PauliString.
PauliPropagation.countyz — Method
countyz(psum::PauliSum)Function to count the number of Y and Z Paulis in a PauliSum. Returns an array of counts.
PauliPropagation.countz — Method
countz(pstr::Integer)Function to count the number of Z Paulis in an integer Pauli string.
PauliPropagation.countz — Method
countz(pstr::PauliString)Function to count the number of Z Paulis in a PauliString.
PauliPropagation.countz — Method
countz(psum::PauliSum)Function to count the number of Z Paulis in a PauliSum. Returns an array of counts.
PauliPropagation.pauliprod — Method
pauliprod(pstr1::Integer, pstr2::Integer)Calculate the product of two integer Pauli strings.
PauliPropagation.pauliprod — Method
pauliprod(pstr1::PauliString, pstr2::PauliString)Calculate the product of two PauliStrings.
Examples
julia> pauliprod(PauliString(1, [:X], [1]), PauliString(1, [:Y], [1])) # X*Y=iZPauliPropagation.pauliprod — Method
pauliprod(psum1::PauliSum, psum2::PauliSum)Calculate the product of two PauliSums. Default returns a PauliSum{TT, ComplexF64} where TT is the type of the new Pauli Strings.
Examples
psum = PauliSum(PauliString(3, [:Y], [2]))
psum_identity = PauliSum(PauliString(3, [:I], [1]))
pauliprod(psum, psum_identity) # Psum * I = PsumPauliPropagation.trace — Method
trace(psum::PauliSum)Wrapper for LinearAlgebra.tr(psum::PauliSum).
Arguments
psum::PauliSum: The Pauli sum to trace.
Returns
CT: The trace value of the PauliSum.
PauliPropagation.trace — Method
trace(pstr::PauliString)Wrapper for LinearAlgebra.tr(pstr::PauliString).
Arguments
pstr::PauliString: The Pauli string to trace.
Returns
CT: The trace value of thePauliString.
Bit operations
PauliPropagation.getinttype — Method
getinttype(nqubits::Integer)Function to return the smallest integer type that can hold nqubits. This is the type that will be used internally for representing Pauli strings.
Utils
PauliPropagation.getpauli — Method
getpauli(pstr::PauliStringType, qinds::Vector{Integer})Gets the Paulis on indices qinds of a pstr in the integer representation.
PauliPropagation.getpauli — Method
getpauli(pstr::PauliStringType, qind1::Int, qind2::Int)Gets the Paulis from qind1 to qind2 of a pstr in the integer representation. This function is useful for extracting a continuous sub-PauliString.
PauliPropagation.inttostring — Method
inttostring(pstr::PauliType, nqubits::Integer)Returns a string representation of an integer Pauli string pstr on nqubits qubits. The characters of the string from left to right are the Paulis on the qubits from 1 to nqubits.
PauliPropagation.inttosymbol — Method
inttosymbol(pstr::PauliStringType, nqubits::Integer)Maps an integer Pauli string to a vector of symbols.
PauliPropagation.inttosymbol — Method
inttosymbol(pauli::PauliType)Maps an integer Pauli to its corresponding symbol.
PauliPropagation.ispauli — Method
ispauli(pauli1::Union{Symbol, PauliType}, pauli2::Union{Symbol, PauliType})
ispauli(pauli1::Union{Vector{Symbol}, PauliStringType}, pauli2::Union{Vector{Symbol}, PauliStringType})Check if two Paulis are equal, where one is given as a symbol and the other as an integer.
PauliPropagation.setpauli — Method
setpauli(pstr::PauliStringType, target_paulis::PauliStringType, index1::Integer, index2::Integer)Sets the Paulis from index1 to index2 of an integer Pauli string to target_paulis.
PauliPropagation.setpauli — Method
setpauli(
pstr::PauliStringType,
target_paulis::Vector{Symbol},
qinds::Vector{Integer}
)Set the Paulis qinds of an integer Pauli string pstr to target_paulis. target_paulis is a vector of symbols. Use tuples in performance critical functions because they are immutable.
PauliPropagation.setpauli — Method
setpauli(
pstr::PauliStringType,
target_paulis::PauliStringType,
qinds::Vector{Integer}
)Set the Paulis qinds of an integer Pauli string pstr to target_paulis. Use Tuples for qinds in performance critical functions because they are immutable.
PauliPropagation.setpauli — Method
setpauli(pstr::PauliStringType, target_pauli::PauliType, index::Integer)Sets the Pauli on index index of an integer Pauli string to target_pauli. That Pauli should be provided as integer (0, 1, 2, 3).
PauliPropagation.setpauli — Method
setpauli(pstr::PauliStringType, target_pauli::Symbol, index::Integer)Sets the Pauli on index of an integer Pauli string to target_pauli. That Pauli should be provided as a symbol (:I, :X, :Y, :Z).
PauliPropagation.symboltoint — Method
symboltoint(pstr::Union{Vector{Symbol}, Symbol})Maps a symbol or a vector of symbols pstr to an integer Pauli string.
Example:
symboltoint([:X, :I])
>>> 0x01PauliPropagation.symboltoint — Method
symboltoint(nqubits::Integer, paulis::Vector{Symbol}, qinds::Vector{Int})Maps a vector of symbols pstr acting on the indices qinds to an integer Pauli string. Other sites are set to the identity. qinds can be any iterable.
PauliPropagation.symboltoint — Method
symboltoint(nqubits::Integer, pauli::Symbol, qind::Integer)Maps a single symbol pauli acting on the index qind to an integer Pauli string. Other sites are set to the identity.
PauliPropagation.symboltoint — Method
symboltoint(pauli::Symbol)Maps a single symbol to its corresponding integer representation.
PauliPropagation.symboltoint — Method
symboltoint(::PauliStringType, paulis, qinds)Maps a vector of symbols paulis acting on the indices qinds to an integer Pauli string with type PauliStringType. Other sites are set to the identity. qinds can be any iterable.
PauliPropagation.symboltoint — Method
symboltoint(::PauliStringType, pauli::Symbol, qind::Integer)Maps a single symbol pauli acting on the index qind to an integer Pauli string with type PauliStringType. Other sites are set to the identity.