Collections of Pauli Operators¶
qecc.PauliList: Sequence type for Pauli operators¶
For convinenence, the qecc package provides a subclass of list
intended for use with Pauli operators. PauliList instances can be created
either by converting an existing instance of a sequence type, or by providing
the elements of the new PauliList.
>>> import qecc as q
>>> L = ['I', 'X', 'Y', 'Z']
>>> print q.PauliList(L)
PauliList(i^0 I, i^0 X, i^0 Y, i^0 Z)
>>> print q.PauliList('XYZ', 'YZX', 'ZXY')
PauliList(i^0 XYZ, i^0 YZX, i^0 ZXY)
Tensor products of a qecc.Pauli` with a PauliList result in
tensoring the given Pauli group element onto each element of the list.
>>> from qecc import X
>>> print q.PauliList(L) & X
PauliList(i^0 IX, i^0 XX, i^0 YX, i^0 ZX)
In general, a qecc.PauliList can be used anywhere that a list of
qecc.Pauli instances is appropriate. For example, the constructor of
qecc.Clifford accepts qecc.PauliList instances:
>>> import qecc as q
>>> C = q.Clifford(q.PauliList('XX', q.Unspecified), q.PauliList(q.Unspecified, q.Pauli('ZZ', phase=2)))
>>> print C
XI |-> +XX
IX |-> Unspecified
ZI |-> Unspecified
IZ |-> -ZZ
Class Reference¶
-
class
qecc.PauliList(*paulis)[source]¶ Subclass of
listoffering useful methods for lists ofqecc.Pauliinstances.Parameters: paulis – Instances either of strorqecc.Pauli, or the special objectqecc.Unspecified. Strings are passed to the constructor ofqecc.Paulifor convinenence.-
pad(extra_bits=0, lower_right=None)[source]¶ Takes a PauliList, and returns a new PauliList, appending
extra_bitsqubits, with stabilizer operators specified bylower_right.Parameters: - pauli_list_in – list of Pauli operators to be padded.
- extra_bits (int) – Number of extra bits to be appended to the system.
- lower_right – list of qecc.Pauli operators, acting on extra_bits qubits.
Return type: list of
qecc.Pauliobjects.Example:
>>> import qecc as q >>> pauli_list = q.PauliList('XXX', 'YIY', 'ZZI') >>> pauli_list.pad(extra_bits=2, lower_right=q.PauliList('IX','ZI')) PauliList(i^0 XXXII, i^0 YIYII, i^0 ZZIII, i^0 IIIIX, i^0 IIIZI)
-
generated_group(coset_rep=None)[source]¶ Yields an iterator onto the group generated by this list of Pauli operators. See also
qecc.from_generators.
-
stabilizer_subspace()[source]¶ Returns a
numpy.ndarrayof shape(n - k, 2 ** n)containing an orthonormal basis for the mutual +1 eigenspace of each fully specified Pauli in this list. Here,nis taken to be the number of qubits andkis taken to be the number of independent Pauli operators in this list.Raises a
RuntimeErrorif NumPy cannot be imported.For example, to find the Bell basis vector
using the stabilizer formalism:>>> import qecc as q >>> q.PauliList('XX', q.Unspecified, q.Unspecified, 'ZZ').stabilizer_subspace() array([[ 0.70710678+0.j, 0.00000000+0.j, 0.00000000+0.j, 0.70710678+0.j]])
Similarly, one can find the codewords of the phase-flip code
:>>> q.PauliList('XXI', 'IXX').stabilizer_subspace() array([[ 0.50000000+0.j, 0.00000000-0.j, 0.00000000-0.j, 0.50000000+0.j, 0.00000000-0.j, 0.50000000+0.j, 0.50000000+0.j, 0.00000000-0.j], [ 0.02229922+0.j, 0.49950250+0.j, 0.49950250+0.j, 0.02229922+0.j, 0.49950250+0.j, 0.02229922+0.j, 0.02229922+0.j, 0.49950250+0.j]])
Note that in this second case, some numerical errors have occured; this method does not guarantee that the returned basis vectors are exact.
-
centralizer_gens(group_gens=None)[source]¶ Returns the generators of the centralizer group
, where
is the
element of this list. See qecc.Pauli.centralizer_gens()for more information.
-