Pauli Simulator

Snowflurry provides tools for the efficient storage and manipulation of Pauli group elements.

Snowflurry.get_pauliFunction
get_pauli(circuit::QuantumCircuit; imaginary_exponent::Integer=0,
    negative_exponent::Integer=0)::PauliGroupElement

Returns a PauliGroupElement given a circuit containing Pauli gates.

A Pauli group element corresponds to $i^\delta (-1)^\epsilon \sigma_a$, where $\delta$ and $\epsilon$ are set by specifying imaginary_exponent and negative_exponent, respectively. The exponents must be 0 or 1. Their default value is 0. As for $\sigma_a$, it is a tensor product of Pauli operators. The Pauli operators are specified in the circuit.

Examples

julia> circuit = QuantumCircuit(qubit_count = 2);

julia> push!(circuit, sigma_x(1), sigma_y(2))
Quantum Circuit Object:
   qubit_count: 2 
   bit_count: 2 
q[1]:──X───────
               
q[2]:───────Y──
               



julia> get_pauli(circuit, imaginary_exponent=1, negative_exponent=1)
Pauli Group Element:
-1.0im*X(1)*Y(2)


If multiple Pauli gates are applied to the same qubit in the circuit, the gates are multiplied with the first gate in the circuit being the rightmost gate in the multiplication.

julia> circuit = QuantumCircuit(qubit_count = 1);

julia> push!(circuit, sigma_x(1), sigma_z(1))
Quantum Circuit Object:
   qubit_count: 1 
   bit_count: 1 
q[1]:──X────Z──
               



julia> get_pauli(circuit)
Pauli Group Element:
1.0im*Y(1)


source
get_pauli(gate::AbstractGateSymbol, num_qubits::Integer; imaginary_exponent::Integer=0,
    negative_exponent::Integer=0)::PauliGroupElement

Returns a PauliGroupElement given a gate and the number of qubits.

A Pauli group element corresponds to $i^\delta (-1)^\epsilon \sigma_a$, where $\delta$ and $\epsilon$ are set by specifying imaginary_exponent and negative_exponent, respectively. The exponents must be 0 or 1. Their default value is 0. As for $\sigma_a$, it is a tensor product of Pauli operators. In this variant of the get_pauli function, a single Pauli operator is set by providing a gate. The number of qubits is specified by num_qubits.

Examples

julia> gate = sigma_x(2);

julia> num_qubits = 3;

julia> get_pauli(gate, num_qubits)
Pauli Group Element:
1.0*X(2)


source
Base.:*Method
Base.:*(p1::PauliGroupElement, p2::PauliGroupElement)::PauliGroupElement

Returns the product of two PauliGroupElement objects.

The PauliGroupElement objects must be associated with the same number of qubits.

Examples

julia> pauli_z = get_pauli(sigma_z(1), 1)
Pauli Group Element:
1.0*Z(1)



julia> pauli_y = get_pauli(sigma_y(1), 1)
Pauli Group Element:
1.0*Y(1)



julia> pauli_z*pauli_y
Pauli Group Element:
-1.0im*X(1)


source
Snowflurry.get_quantum_circuitFunction
get_quantum_circuit(pauli::PauliGroupElement)::QuantumCircuit

Returns the Pauli gates of a PauliGroupElement as a QuantumCircuit.

Examples

julia> circuit = QuantumCircuit(qubit_count = 2);

julia> push!(circuit, sigma_x(1), sigma_y(2))
Quantum Circuit Object:
   qubit_count: 2 
   bit_count: 2 
q[1]:──X───────
               
q[2]:───────Y──
               



julia> pauli = get_pauli(circuit, imaginary_exponent = 1, negative_exponent = 1)
Pauli Group Element:
-1.0im*X(1)*Y(2)



julia> get_quantum_circuit(pauli)
Quantum Circuit Object:
   qubit_count: 2 
   bit_count: 2 
q[1]:──X───────
               
q[2]:───────Y──
               


source
Snowflurry.get_negative_exponentFunction
get_negative_exponent(pauli::PauliGroupElement)::Int

Returns the negative exponent of a PauliGroupElement.

Examples

julia> gate = sigma_x(2);

julia> num_qubits = 3;

julia> pauli = get_pauli(gate, num_qubits, negative_exponent = 1)
Pauli Group Element:
-1.0*X(2)



julia> get_negative_exponent(pauli)
1
source
Snowflurry.get_imaginary_exponentFunction
get_imaginary_exponent(pauli::PauliGroupElement)::Int

Returns the imaginary exponent of a PauliGroupElement.

Examples

julia> gate = sigma_x(2);

julia> num_qubits = 3;

julia> pauli = get_pauli(gate, num_qubits, imaginary_exponent = 1)
Pauli Group Element:
1.0im*X(2)



julia> get_imaginary_exponent(pauli)
1
source