Пример #1
0
def serialize_paulisum(paulisum):
    """Constructs a pauli_sum proto from `cirq.PauliSum` or `cirq.PauliString`.

    Args:
        paulisum: A `cirq.PauliSum` object.

    Returns:
        A pauli_sum proto object.
    """
    if isinstance(paulisum, cirq.PauliString):
        paulisum = cirq.PauliSum.from_pauli_strings(paulisum)

    if not isinstance(paulisum, cirq.PauliSum):
        raise TypeError("serialize requires a cirq.PauliSum object."
                        " Given: " + str(type(paulisum)))

    if any(not isinstance(qubit, cirq.GridQubit) for qubit in paulisum.qubits):
        raise ValueError("Attempted to serialize a paulisum that doesn't use "
                         "only cirq.GridQubits.")

    paulisum_proto = pauli_sum_pb2.PauliSum()
    for term in paulisum:
        pauliterm_proto = pauli_sum_pb2.PauliTerm()

        pauliterm_proto.coefficient_real = term.coefficient.real
        pauliterm_proto.coefficient_imag = term.coefficient.imag
        for t in sorted(term.items()):  # sort to keep qubits ordered.
            pauliterm_proto.paulis.add(
                qubit_id=v2.qubit_to_proto_id(t[0]),
                pauli_type=str(t[1]),
            )
        paulisum_proto.terms.extend([pauliterm_proto])

    return paulisum_proto
Пример #2
0
def _build_pauli_proto(coefs, ops, qubit_ids):
    """Construct pauli_sum proto explicitly."""
    terms = []
    for i in range(len(coefs)):
        term = pauli_sum_pb2.PauliTerm()
        term.coefficient_real = coefs[i].real
        term.coefficient_imag = coefs[i].imag
        for j in range(len(qubit_ids[i])):
            term.paulis.add(qubit_id=qubit_ids[i][j], pauli_type=ops[i][j])

        terms.append(term)

    a = pauli_sum_pb2.PauliSum()
    a.terms.extend(terms)
    return a