# cirq.PauliSum

Represents operator defined by linear combination of PauliStrings.

Since `cirq.PauliString`s store their own coefficients, this class does not implement the `cirq.LinearDict` interface. Instead, you can add and subtract terms and then iterate over the resulting (simplified) expression.

Under the hood, this class is backed by a LinearDict with coefficient-less PauliStrings as keys. PauliStrings are reconstructed on-the-fly during iteration.

PauliSums can be constructed explicitly:

````a, b = cirq.GridQubit.rect(1, 2)`
`psum = cirq.PauliSum.from_pauli_strings([`
`    cirq.PauliString(-1, cirq.X(a), cirq.Y(b)),`
`    cirq.PauliString(2, cirq.Z(a), cirq.Z(b)),`
`    cirq.PauliString(0.5, cirq.Y(a), cirq.Y(b))`
`])`
`print(psum)`
`-1.000*X(q(0, 0))*Y(q(0, 1))+2.000*Z(q(0, 0))*Z(q(0, 1))+0.500*Y(q(0, 0))*Y(q(0, 1))`
```

or implicitly:

````a, b = cirq.GridQubit.rect(1, 2)`
`psum = cirq.X(a) * cirq.X(b) + 3.0 * cirq.Y(a)`
`print(psum)`
`1.000*X(q(0, 0))*X(q(0, 1))+3.000*Y(q(0, 0))`
```

basic arithmetic and expectation operations are supported as well:

````a, b = cirq.GridQubit.rect(1, 2)`
`psum = cirq.X(a) * cirq.X(b) + 3.0 * cirq.Y(a)`
`two_psum = 2 * psum`
`four_psum = two_psum + two_psum`
`print(four_psum)`
`4.000*X(q(0, 0))*X(q(0, 1))+12.000*Y(q(0, 0))`
```
````expectation = four_psum.expectation_from_state_vector(`
`    np.array([0.707106, 0, 0, 0.707106], dtype=complex),`
`    qubit_map={a: 0, b: 1}`
`)`
`print(f'{expectation:.1f}')`
`4.0+0.0j`
```

`linear_dict` Set of (`cirq.Qid`, `cirq.Pauli`) tuples to construct the sum from.

`ValueError` If structure of `linear_dict` contains tuples other than the form (`cirq.Qid`, `cirq.Pauli`).

`qubits` The sorted list of qubits used in this PauliSum.

## Methods

### `copy`

View source

Return a copy of this PauliSum.

Returns: A copy of this PauliSum.

### `expectation_from_density_matrix`

View source

Evaluate the expectation of this PauliSum given a density matrix.

Args
`state` An array representing a valid density matrix.
`qubit_map` A map from all qubits used in this PauliSum to the indices of the qubits that `state` is defined over.
`atol` Absolute numerical tolerance.
`check_preconditions` Whether to check that `state` represents a valid density matrix.

Returns
The expectation value of the input state.

Raises
`NotImplementedError` If any of the coefficients are imaginary, so that this is not Hermitian.
`TypeError` If the input state is not a complex type.
`ValueError` If the input vector is not the correct size or shape.

### `expectation_from_state_vector`

View source

Evaluate the expectation of this PauliSum given a state vector.

Args
`state_vector` An array representing a valid state vector.
`qubit_map` A map from all qubits used in this PauliSum to the indices of the qubits that `state_vector` is defined over.
`atol` Absolute numerical tolerance.
`check_preconditions` Whether to check that `state_vector` represents a valid state vector.

Returns
The expectation value of the input state.

Raises
`NotImplementedError` If any of the coefficients are imaginary, so that this is not Hermitian.
`TypeError` If the input state is not a complex type.
`ValueError` If the input vector is not the correct size or shape.

### `from_boolean_expression`

View source

Builds the Hamiltonian representation of a Boolean expression.

This is based on "On the representation of Boolean and real functions as Hamiltonians for quantum computing" by Stuart Hadfield, https://arxiv.org/abs/1804.09130

Args
`boolean_expr` A Sympy expression containing symbols and Boolean operations
`qubit_map` map of string (boolean variable name) to qubit.

Return
The PauliSum that represents the Boolean expression.

Raises
`ValueError` If `boolean_expr` is of an unsupported type.

### `from_pauli_strings`

View source

Returns a PauliSum by combining `cirq.PauliString` terms.

Args
`terms` `cirq.PauliString` or List of `cirq.PauliString`s to use inside of this PauliSum object.

Returns
PauliSum object representing the addition of all the `cirq.PauliString` terms in `terms`.

### `matrix`

View source

Returns the matrix of this PauliSum in computational basis of qubits.

Args
`qubits` Ordered collection of qubits that determine the subspace in which the matrix representation of the Pauli sum is to be computed. If none is provided the default ordering of `self.qubits` is used. Qubits present in `qubits` but absent from `self.qubits` are acted on by the identity.

Returns
np.ndarray representing the matrix of this PauliSum expression.

Raises
`TypeError` if any of the gates in self does not provide a unitary.

### `with_qubits`

View source

Return a new PauliSum on `new_qubits`.

Args
`*new_qubits` `cirq.Qid` objects to replace existing qubit objects in this PauliSum.

Returns
PauliSum with new_qubits replacing the previous qubits.

Raises
`ValueError` If len(new_qubits) != len(self.qubits).

### `wrap`

View source

Convert a `cirq.PauliSumLike` object to a PauliSum

Attemps to convert an existing int, float, complex, `cirq.PauliString`, `cirq.PauliSum` or `cirq.SingleQubitPauliStringGateOperation` into a `cirq.PauliSum` object. For example:

````my_psum = cirq.PauliSum.wrap(2.345)`
`my_psum`
`cirq.PauliSum(cirq.LinearDict({frozenset(): (2.345+0j)}))`
```

Args
`cirq.PauliSumLike` to convert to PauliSum.

Returns
PauliSum representation of `val`.

View source

View source

View source

View source

View source

View source

View source

View source

View source

View source

View source

View source

View source

### `__truediv__`

View source

[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"Missing the information I need" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"Too complicated / too many steps" },{ "type": "thumb-down", "id": "outOfDate", "label":"Out of date" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"Samples / code issue" },{ "type": "thumb-down", "id": "otherDown", "label":"Other" }]
[{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Easy to understand" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Solved my problem" },{ "type": "thumb-up", "id": "otherUp", "label":"Other" }]