def sparse( self, qubits: Optional[Sequence['cirq.Qid']] = None ) -> 'cirq.PauliString': """A `cirq.PauliString` version of this dense pauli string. Args: qubits: The qubits to apply the Paulis to. Defaults to `cirq.LineQubit.range(len(self))`. Returns: A `cirq.PauliString` with the non-identity operations from this dense pauli string applied to appropriate qubits. Raises: ValueError: If the number of qubits supplied does not match that of this instance. """ if qubits is None: from cirq import devices qubits = devices.LineQubit.range(len(self)) if len(qubits) != len(self): raise ValueError('Wrong number of qubits.') return pauli_string.PauliString( coefficient=self.coefficient, qubit_pauli_map={ q: PAULI_GATES[p] for q, p in zip(qubits, self.pauli_mask) if p }, )
def approx_pauli_string_expectation( observable: 'cirq.PAULI_STRING_LIKE', num_samples: int, key: Hashable = '') -> ApproxPauliStringExpectation: return ApproxPauliStringExpectation(pauli_string.PauliString(observable), num_samples, key=key)