Header menu logo Encodings

Tapering Module

Symbolic qubit tapering utilities for Pauli Hamiltonians.

v1: diagonal Z2 tapering (single-qubit Z generators).

v2: general Z₂ symmetry detection via symplectic representation, independent generator selection over GF(2), Clifford rotation synthesis, and a unified tapering pipeline.

Types

Type Description

CliffordGate

Elementary Clifford gate for tapering rotation.

SymplecticVector

Binary (GF(2)) symplectic vector representing an n-qubit Pauli string. Layout: [x₀ x₁ … xₙ₋₁ | z₀ z₁ … zₙ₋₁] where I=(0,0), X=(1,0), Y=(1,1), Z=(0,1).

TaperingMethod

Tapering method selection.

TaperingOptions

Options for the unified tapering pipeline.

TaperingResult

Result of the unified tapering pipeline (extends v1 result).

Z2TaperingResult

Result of a Z2 tapering operation.

Functions and values

Function or value Description

applyClifford gates hamiltonian

Full Usage: applyClifford gates hamiltonian

Parameters:
Returns: PauliRegisterSequence

Apply a sequence of Clifford gates to a PauliRegisterSequence. Uses the symplectic representation for exact conjugation.

gates : CliffordGate list
hamiltonian : PauliRegisterSequence
Returns: PauliRegisterSequence

applyGatesToSymplectic gates sv

Full Usage: applyGatesToSymplectic gates sv

Parameters:
Returns: SymplecticVector

Apply a sequence of Clifford gates to a symplectic vector.

gates : CliffordGate list
sv : SymplecticVector
Returns: SymplecticVector

commutes a b

Full Usage: commutes a b

Parameters:
Returns: bool

Returns true if two Pauli strings commute (symplectic inner product = 0 mod 2).

a : SymplecticVector
b : SymplecticVector
Returns: bool

defaultTaperingOptions

Full Usage: defaultTaperingOptions

Returns: TaperingOptions

Defaults: +1 sector, no cap, full Clifford.

Returns: TaperingOptions

diagonalZ2Generators hamiltonian

Full Usage: diagonalZ2Generators hamiltonian

Parameters:
Returns: PauliRegister[]

Returns single-qubit Z generators for all detected diagonal Z2 symmetries.

hamiltonian : PauliRegisterSequence
Returns: PauliRegister[]

diagonalZ2SymmetryQubits hamiltonian

Full Usage: diagonalZ2SymmetryQubits hamiltonian

Parameters:
Returns: int[]

Detects qubit indices i such that all terms are diagonal (I or Z) on qubit i.

hamiltonian : PauliRegisterSequence
Returns: int[]

findCommutingGenerators hamiltonian

Full Usage: findCommutingGenerators hamiltonian

Parameters:
Returns: SymplecticVector[]

Find all Pauli strings (as symplectic vectors) that commute with every term in the Hamiltonian. This is the commutant / symmetry group.

hamiltonian : PauliRegisterSequence
Returns: SymplecticVector[]

fromSymplectic sv

Full Usage: fromSymplectic sv

Parameters:
Returns: PauliRegister

Convert a symplectic vector back to a PauliRegister with coefficient +1.

sv : SymplecticVector
Returns: PauliRegister

independentGenerators generators

Full Usage: independentGenerators generators

Parameters:
Returns: SymplecticVector[]

Select a maximal linearly independent subset of symplectic vectors over GF(2).

generators : SymplecticVector[]
Returns: SymplecticVector[]

symplecticInnerProduct a b

Full Usage: symplecticInnerProduct a b

Parameters:
Returns: bool

Symplectic inner product mod 2: returns true if the two Pauli strings anti-commute. Two n-qubit Paulis commute iff ⟨a, b⟩_s = Σᵢ (aₓᵢ bᵤᵢ ⊕ aᵤᵢ bₓᵢ) = 0 (mod 2).

a : SymplecticVector
b : SymplecticVector
Returns: bool

synthesizeTaperingClifford generators

Full Usage: synthesizeTaperingClifford generators

Parameters:
Returns: CliffordGate list * int[]

Synthesize a Clifford circuit that rotates a set of independent generators each onto a single-qubit Z operator. Returns the gate list and target qubit indices (one per generator).

generators : SymplecticVector[]
Returns: CliffordGate list * int[]

taper options hamiltonian

Full Usage: taper options hamiltonian

Parameters:
Returns: TaperingResult

Unified tapering pipeline: detect Z₂ symmetries, synthesize Clifford rotation, apply it, then taper the rotated Hamiltonian diagonally.

options : TaperingOptions
hamiltonian : PauliRegisterSequence
Returns: TaperingResult

taperAllDiagonalZ2WithPositiveSector hamiltonian

Full Usage: taperAllDiagonalZ2WithPositiveSector hamiltonian

Parameters:
Returns: Z2TaperingResult

Convenience helper: taper all detected diagonal Z2 symmetries in the +1 sector.

hamiltonian : PauliRegisterSequence
Returns: Z2TaperingResult

taperDiagonalZ2 sector hamiltonian

Full Usage: taperDiagonalZ2 sector hamiltonian

Parameters:
    sector : (int * int) list - List of (qubitIndex, eigenvalue) pairs with eigenvalue in {+1,-1}.
    hamiltonian : PauliRegisterSequence - Input Hamiltonian as a Pauli sum.

Returns: Z2TaperingResult

Tapers a Hamiltonian by fixing diagonal Z2 symmetry sectors and removing those qubits.

sector : (int * int) list

List of (qubitIndex, eigenvalue) pairs with eigenvalue in {+1,-1}.

hamiltonian : PauliRegisterSequence

Input Hamiltonian as a Pauli sum.

Returns: Z2TaperingResult

toSymplectic r

Full Usage: toSymplectic r

Parameters:
Returns: SymplecticVector

Convert a PauliRegister to its symplectic binary representation. Coefficient/phase is discarded — only the Pauli structure matters.

r : PauliRegister
Returns: SymplecticVector

z2SymmetryCount hamiltonian

Full Usage: z2SymmetryCount hamiltonian

Parameters:
Returns: int

Count the number of independent Z₂ symmetries of the Hamiltonian. This equals the maximum number of qubits that can be tapered.

hamiltonian : PauliRegisterSequence
Returns: int

Type something to start searching.