Strings

class zixy.qubit.pauli.Strings(qubits: int | Qubits = 0, n: int = 0)[source]

Bases: Strings[QubitPauliArray, None | Sequence[PauliMatrix] | dict[int, PauliMatrix] | str, PauliMatrix]

A collection of Pauli strings.

An array-like container of qubit-based Pauli strings that may be an owning instance referencing a contiguous Rust-bound data object, or a view on a slice of the elements in another collection.

__eq__(other: object) bool

Return whether self and other are equal.

__getitem__(indexer: int | slice) String | Strings[source]
Overloads:
  • self, indexer (int) → String

  • self, indexer (slice) → Strings

Get the element or elements selected by indexer.

Parameters:

indexer – Index or slice selecting the element(s) to return.

Returns:

Element or slice selected by indexer.

__init__(qubits: int | Qubits = 0, n: int = 0)[source]

Initialize the string array.

Parameters:
  • qubits – Qubits object or number of qubits to use.

  • n – Number of default elements with which to create the instance.

__iter__() Iterator[T]

Iterate over the elements of self.

__len__() int

Get the number of elements in self.

__repr__() str

Return a string representation of self.

__setitem__(indexer: int | slice, source: SpecT | Cmpnt[ImplT, SpecT] | Cmpnts[ImplT, SpecT] | None) None

Set the component at indexer in self to source.

Parameters:
  • indexer – Index of the string or slice of strings within self to assign.

  • source – Value specifying the component or a view of many components to assign at indexer.

append(source: SpecT | Cmpnt[ImplT, SpecT] | None = None) Self

Append source to the end of self.

Parameters:

source – Value to append.

Note

This method operates in-place.

append_iterable(source: Iterable[SpecT | Cmpnt[ImplT, SpecT] | None] = ()) Self

Append many values from an iterable source.

Parameters:

source – Iterable over any component specifiers.

Note

This method operates in-place.

append_n(n: int, source: SpecT | Cmpnt[ImplT, SpecT] | None = None) Self

Append source to the end of self n times.

Parameters:
  • n – Number of times to repeatedly append source.

  • source – Specification for the value to append.

Note

This method operates in-place.

as_view() Self

Return a view of self.

Returns:

If self is owning, a new view on the same underlying data, otherwise self.

centralizer_and_remainder() tuple[Strings, Strings][source]

Get the centralizer and remainder of self.

The centralizer of a set \(S\) of Pauli strings is the set of strings \(C\) that commute with all others in \(S\). The remainder is the set of Pauli strings that are in \(S\) but not in \(C\).

Returns:

The centralizer and remainder as a pair of Strings instances.

clone() Self

Return a deep copy of self.

cmpnt_type

alias of String

compatibility_matrix() NDArray[uint8][source]

Form the compatibility matrix for the strings in self.

Returns:

Matrix with 1 where the strings represented by the row and column commute, 0 elsewhere.

count(value) integer -- return number of occurrences of value
filter_map(f: Callable[[Cmpnt[ImplT, SpecT]], bool]) Self

Eagerly evaluate a filter-map operation over the components of self.

Parameters:

f – Function which may mutate copies of the components of self, returning True if those mutated copies are to be included in the generator. The function signature should take a single Cmpnt instance as an argument, and return a boolean.

Returns:

New instance containing the occurrences of selected (and possibly mutated) components of self according to f.

filter_non_identity() Strings[source]

Eagerly filter retaining only the strings that are different to identity.

filter_populated() Self

Eagerly filter components of self, retaining only those that are not clear.

filter_unique() Cmpnts[ImplT, SpecT]

Get a new Cmpnts instance containing the unique components of self.

classmethod from_cmpnt(cmpnt: Cmpnt[ImplT, SpecT]) Self

Create a new one-element instance from a single component.

Parameters:

cmpnt – Component to copy into the new instance.

Returns:

New owning instance containing only cmpnt.

classmethod from_iterable(iterable: Iterable[SpecT | Cmpnt[ImplT, SpecT]], *args: Any, **kwargs: Any) Self

Create a new instance of cls from an iterable.

Parameters:
  • iterable – Iterable returning specifiers of all the components to be appended.

  • args – Positional arguments to forward to the constructor of cls.

  • kwargs – Keyword arguments to forward to the constructor of cls.

Returns:

New instance of cls containing the components specified by iterable.

classmethod from_size(n: int) Self

Create a new instance of cls with the given size.

Parameters:

n – The size of the new instance.

Returns:

An instance of cls with the given size.

classmethod from_str(source: str, qubits: int | Qubits | None = None) Strings[source]

Create a new instance of cls by parsing an input string.

Parameters:
  • qubits – Space of qubits or a number of qubits. If None, infer from the max qubit index in the input string.

  • source – Input string to parse.

Returns:

A new instance containing the Pauli string in the source.

classmethod from_view(source: Self) Self

Create a new instance of cls from a view.

Parameters:

source – View to clone into the new instance.

Returns:

An owning clone of source.

get_dicts() tuple[dict[int, PauliMatrix], ...][source]

Get the strings as a list of dictionaries of their elements.

get_list() list[list[ElemT]][source]

Get all the strings as a list of lists of their elements.

get_tuples() tuple[tuple[ElemT, ...], ...][source]

Get all the strings as a list of tuples of their elements.

into(t: type[OutT]) OutT

Clone self into a new related container of type t.

Parameters:

t – Type of the new container to create.

Returns:

A new instance of t containing the same data as self.

is_owning() bool

Check if self is owning (i.e. not a view).

iter_filter_map(f: Callable[[Cmpnt[ImplT, SpecT]], bool]) Iterator[Cmpnt[ImplT, SpecT]]

Lazily evaluate a filter-map operation over the components of self.

Parameters:

f – Function which may mutate copies of the components of self, returning True if those mutated copies are to be included in the generator. The function signature should take a single Cmpnt instance as an argument, and return a boolean.

Returns:

Iterator over the selected (and possibly mutated) components of self according to f.

iter_filter_non_identity() Iterator[String][source]

Lazy filter retaining only the strings that are different to identity.

iter_filter_populated() Iterator[Cmpnt[ImplT, SpecT]]

Lazily filter components of self, retaining only those that are not clear.

map_index(i: int) int

Map an index in self to an index in the underlying data.

Parameters:

i – Index in self.

Returns:

Corresponding index in the underlying data.

new_clear_cmpnt() Cmpnt[ImplT, SpecT]

Get a new Cmpnt instance using the same implementation as self.

property qubits: Qubits

Get the qubits corresponding to self.

relabel(qubits: Qubits) Self[source]

Relabel the contents of the strings according to a new qubit register.

Parameters:

qubits – The qubit register or qubit count.

Returns:

self for chaining.

Note

This method operates in-place.

relabelled(qubits: Qubits) Self[source]

Relabel the contents of a clone of the strings according to a new set of qubit register.

Parameters:

qubits – The qubit register or qubit count.

Returns:

The resulting value.

reordered(inds: Sequence[int]) Self

Get a new instance with the elements of self in a new order.

Parameters:

inds – Sequence of indices defining the new order. Should be a permutation of range(len(self)).

Returns:

A new instance with the reordered elements.

resize(n: int) Self

Resize the underlying container.

Parameters:

n – The new size of the container.

Note

This method operates in-place.

Raises:

ValueError – If the container is a view.

standardize(n_qubit: int) Self[source]

Standardize the string labels according to a given number of qubits.

Reorders the contents of the strings such that the associated qubit register can be reassigned to Qubits.from_count(n_qubit) without semantic relabelling. The given n_qubit may differ from the size of the original register. If larger, clear qubits are appended after the reordered contents; if smaller, only contents at qubit indices less than n_qubit will be retained.

Parameters:

n_qubit – The number of qubits.

Returns:

self for chaining.

Note

This method operates in-place.

standardized(n_qubit: int) Self[source]

Standardize the labels of a clone of the string according to a given number of qubits.

Reorders the contents of the strings such that the associated qubit register can be reassigned to Qubits.from_count(n_qubit) without semantic relabelling. The given n_qubit may differ from the size of the original register. If larger, clear qubits are appended after the reordered contents; if smaller, only contents at qubit indices less than n_qubit will be retained.

Parameters:

n_qubit – The number of qubits.

Returns:

The resulting value.