Exemplo n.º 1
0
 def _compute_metric_dict(
     self, metrics: v2.metrics_pb2.MetricsSnapshot
 ) -> Dict[str, Dict[Tuple['cirq.GridQubit', ...], Any]]:
     results: Dict[str, Dict[Tuple[devices.GridQubit, ...],
                             Any]] = defaultdict(dict)
     for metric in metrics:
         name = metric.name
         # Flatten the values to a list, removing keys containing type names
         # (e.g. proto version of each value is {<type>: value}).
         flat_values = [
             getattr(v, v.WhichOneof('val')) for v in metric.values
         ]
         if metric.targets:
             targets = [
                 t[1:] if t.startswith('q') else t for t in metric.targets
             ]
             # TODO: Remove when calibrations don't prepend this.
             qubits = tuple(v2.grid_qubit_from_proto_id(t) for t in targets)
             results[name][qubits] = flat_values
         else:
             assert len(results[name]) == 0, (
                 'Only one metric of a given name can have no targets. '
                 'Found multiple for key {}'.format(name))
             results[name][()] = flat_values
     return results
Exemplo n.º 2
0
 def from_proto(self,
                proto: v2.program_pb2.Operation) -> 'cirq.GateOperation':
     """Turns a cirq.api.google.v2.Operation proto into a GateOperation."""
     qubits = [api_v2.grid_qubit_from_proto_id(q.id) for q in proto.qubits]
     args = self._args_from_proto(proto)
     if self.num_qubits_param is not None:
         args[self.num_qubits_param] = len(qubits)
     gate = self.gate_constructor(**args)
     return gate.on(*qubits)
Exemplo n.º 3
0
def test_grid_qubit_from_proto_id_invalid():
    with pytest.raises(ValueError, match='3_3_3'):
        _ = v2.grid_qubit_from_proto_id('3_3_3')
    with pytest.raises(ValueError, match='a_2'):
        _ = v2.grid_qubit_from_proto_id('a_2')
    with pytest.raises(ValueError, match='q1_q2'):
        v2.grid_qubit_from_proto_id('q1_q2')
    with pytest.raises(ValueError, match='q-1_q2'):
        v2.grid_qubit_from_proto_id('q-1_q2')
    with pytest.raises(ValueError, match='-1_q2'):
        v2.grid_qubit_from_proto_id('-1_q2')
Exemplo n.º 4
0
    def str_to_key(self, target: str) -> Union[devices.GridQubit, str]:
        """Turns a string into a calibration key.

        Attempts to parse it as a GridQubit.  If this fails,
        returns the string itself.
        """
        try:
            return v2.grid_qubit_from_proto_id(target)
        except ValueError:
            return target
Exemplo n.º 5
0
    def _qid_from_str(id_str: str) -> 'cirq.Qid':
        """Translates a qubit id string info cirq.Qid objects.

        Tries to translate to GridQubit if possible (e.g. '4_3'), otherwise
        falls back to using NamedQubit.
        """
        try:
            return v2.grid_qubit_from_proto_id(id_str)
        except ValueError:
            return v2.named_qubit_from_proto_id(id_str)
Exemplo n.º 6
0
 def from_proto(self,
                proto: v2.program_pb2.Operation,
                *,
                arg_function_language: str = '') -> 'cirq.Operation':
     """Turns a cirq.google.api.v2.Operation proto into a GateOperation."""
     qubits = [v2.grid_qubit_from_proto_id(q.id) for q in proto.qubits]
     args = self._args_from_proto(
         proto, arg_function_language=arg_function_language)
     if self.num_qubits_param is not None:
         args[self.num_qubits_param] = len(qubits)
     gate = self.gate_constructor(**args)
     return self.op_wrapper(gate.on(*qubits), proto)
Exemplo n.º 7
0
def _trial_sweep_from_proto(
    msg: result_pb2.SweepResult,
    measure_map: Dict[str, MeasureInfo] = None,
) -> List[study.TrialResult]:
    """Converts a SweepResult proto into List of list of trial results.

    Args:
        msg: v2 Result message to convert.
        measure_map: A mapping of measurement keys to a mesurement configuration
            containing qubit ordering. If no measurement config is provided,
            then all results will be returned in the order specified within the
            result.

    Returns:
        A list containing a list of trial results for the sweep.
    """

    trial_sweep: List[study.TrialResult] = []
    for pr in msg.parameterized_results:
        m_data: Dict[str, np.ndarray] = {}
        for mr in pr.measurement_results:
            qubit_results: OrderedDict[devices.GridQubit,
                                       np.ndarray] = OrderedDict()
            for qmr in mr.qubit_measurement_results:
                qubit = v2.grid_qubit_from_proto_id(qmr.qubit.id)
                if qubit in qubit_results:
                    raise ValueError('qubit already exists: {}'.format(qubit))
                qubit_results[qubit] = unpack_bits(qmr.results,
                                                   msg.repetitions)
            if measure_map:
                ordered_results = [
                    qubit_results[qubit]
                    for qubit in measure_map[mr.key].qubits
                ]
            else:
                ordered_results = list(qubit_results.values())
            m_data[mr.key] = np.array(ordered_results).transpose()
        trial_sweep.append(
            study.TrialResult.from_single_parameter_set(
                params=study.ParamResolver(dict(pr.params.assignments)),
                measurements=m_data,
            ))
    return trial_sweep
Exemplo n.º 8
0
def deserialize_paulisum(proto):
    """Constructs a `cirq.PauliSum` from pauli_sum proto.

    Args:
        proto: A pauli_sum proto object.

    Returns:
        A `cirq.PauliSum` object.
    """
    if not isinstance(proto, pauli_sum_pb2.PauliSum):
        raise TypeError("deserialize requires a pauli_sum_pb2 object."
                        " Given: " + str(type(proto)))

    res = cirq.PauliSum()
    for term_proto in proto.terms:
        coef = term_proto.coefficient_real + 1.0j * term_proto.coefficient_imag
        term = coef * cirq.PauliString()
        for pauli_qubit_pair in term_proto.paulis:
            op = _process_pauli_type(pauli_qubit_pair.pauli_type)
            term *= op(v2.grid_qubit_from_proto_id(pauli_qubit_pair.qubit_id))
        res += term

    return res
Exemplo n.º 9
0
def test_grid_qubit_from_proto_id():
    assert v2.grid_qubit_from_proto_id('1_2') == cirq.GridQubit(1, 2)
    assert v2.grid_qubit_from_proto_id('10_2') == cirq.GridQubit(10, 2)
    assert v2.grid_qubit_from_proto_id('-1_2') == cirq.GridQubit(-1, 2)
    assert v2.grid_qubit_from_proto_id('q-1_2') == cirq.GridQubit(-1, 2)
    assert v2.grid_qubit_from_proto_id('q1_2') == cirq.GridQubit(1, 2)
Exemplo n.º 10
0
 def _qid_from_str(id_str: str) -> 'cirq.Qid':
     try:
         return v2.grid_qubit_from_proto_id(id_str)
     except ValueError:
         return v2.named_qubit_from_proto_id(id_str)