PauliRegister

class samplomatic.virtual_registers.PauliRegister(virtual_gates)[source]

Bases: GroupRegister

Virtual register of virtual projective Pauli gates.

Here, projective means we are modding out the centralizer, in other words, ignoring phases.

The Paulis I, X, Y, and Z correspond to 0, 2, 3, and 1 respectively. The non-alphabetical assignment of Y and Z is because it is more convenient in most calculations to have them in symplectic ordering. I.e., for a projective Pauli operation \(P = X^x Z^z\) with \(x,z\in\mathbb{Z}_2\), we order according to binary number zx.

Attributes Summary

CONVERTABLE_TYPES

Valid arguments for convert_to().

GATE_SHAPE

The array shape of any single virtual gate.

SUBSYSTEM_SIZE

The number of qubits each virtual gate acts on.

TYPE

The group name in 1-1 correspondence with this virtual gate type.

Methods Summary

convert_to(register_type)

Convert this register type to some other type, if possible.

identity(num_subsystems, num_samples)

Instantiate a new register of identity virtual gates.

inplace_multiply(other[, subsystem_idxs])

Inplace-multiply each virtual gate with the corresponding element of other.

invert()

Return a new virtual register that inverts each virtual gate.

multiply(other[, subsystem_idxs])

Multiply each virtual gate with the corresponding element of other.

Attributes Documentation

CONVERTABLE_TYPES: frozenset[VirtualType] = frozenset({VirtualType.PAULI, VirtualType.U2, VirtualType.Z2})

Valid arguments for convert_to().

GATE_SHAPE: tuple[int, ...] = ()

The array shape of any single virtual gate.

SUBSYSTEM_SIZE: int = 1

The number of qubits each virtual gate acts on.

TYPE: VirtualType = 'pauli'

The group name in 1-1 correspondence with this virtual gate type.

Methods Documentation

convert_to(register_type)[source]

Convert this register type to some other type, if possible.

Parameters:

register_type – The type of register to convert to.

Returns:

A new register of the specified output type, or this instance if its type is register_type.

Raises:

VirtualGateError – If this type cannot be converted to the specified type.

classmethod identity(num_subsystems, num_samples)[source]

Instantiate a new register of identity virtual gates.

inplace_multiply(other, subsystem_idxs: list[int] | slice = slice(None, None, None))[source]

Inplace-multiply each virtual gate with the corresponding element of other.

Parameters:
  • other – Another virtual register of the same type.

  • subsystem_idxs – The indices of the subsystems to multiply, in self.

Raises:

VirtualGateError – When the shapes do not match.

invert()[source]

Return a new virtual register that inverts each virtual gate.

multiply(other, subsystem_idxs: list[int] | slice = slice(None, None, None))[source]

Multiply each virtual gate with the corresponding element of other.

Parameters:
  • other – Another virtual register of the same type.

  • subsystem_idxs – The indices of the subsystems to multiply, in self.

Returns:

A new virtual register of the same type.

Raises:

VirtualGateError – When the shapes do not match.