def _build_sampler_results(
    mock_qpu_implementer: Any,
    circuit: cirq.Circuit,
    sweepable: cirq.Sweepable,
    *,
    executor: executors.CircuitSweepExecutor = _default_executor,
    transformer: transformers.CircuitTransformer = transformers.default,
) -> Tuple[Sequence[cirq.Result], QuantumComputer,
           List["np.ndarray[Any, np.dtype[np.float_]]"], cirq.Sweepable, ]:
    repetitions = 2

    param_resolvers = [r for r in cirq.to_resolvers(sweepable)]
    expected_results = [
        np.ones((repetitions, )) * (params["t"] if "t" in params else i)
        for i, params in enumerate(param_resolvers)
    ]
    quantum_computer = mock_qpu_implementer.implement_passive_quantum_computer_with_results(
        expected_results)
    service = RigettiQCSService(quantum_computer=quantum_computer,
                                executor=executor,
                                transformer=transformer)

    sampler = service.sampler()

    results = sampler.run_sweep(program=circuit,
                                params=param_resolvers,
                                repetitions=repetitions)
    return results, quantum_computer, expected_results, param_resolvers
def _build_service_results(
    mock_qpu_implementer: Any,
    circuit: cirq.Circuit,
    sweepable: cirq.Sweepable,
    *,
    executor: executors.CircuitSweepExecutor = _default_executor,
    transformer: transformers.CircuitTransformer = transformers.default,
) -> Tuple[Sequence[cirq.Result], QuantumComputer,
           List["np.ndarray[Any, np.dtype[np.float_]]"],
           List[cirq.ParamResolver], ]:
    repetitions = 2
    param_resolvers = [r for r in cirq.to_resolvers(sweepable)]
    param_resolver_index = min(1, len(param_resolvers) - 1)
    param_resolver = param_resolvers[param_resolver_index]

    expected_results = [
        np.ones(
            (repetitions, )) * (param_resolver["t"] if "t" in param_resolver
                                else param_resolver_index)
    ]
    quantum_computer = mock_qpu_implementer.implement_passive_quantum_computer_with_results(
        expected_results)
    service = RigettiQCSService(quantum_computer=quantum_computer,
                                executor=executor,
                                transformer=transformer)

    result = service.run(circuit=circuit,
                         param_resolver=param_resolver,
                         repetitions=repetitions)
    return [result], quantum_computer, expected_results, [param_resolver]
예제 #3
0
def test_parametric_circuit_through_service(
    parametric_circuit_with_params: Tuple[cirq.Circuit,
                                          cirq.Linspace]) -> None:
    """test that RigettiQCSService can run a basic parametric circuit on
    the QVM and return an accurate `cirq.study.Result`.
    """
    circuit, sweepable = parametric_circuit_with_params

    qc = get_qc('9q-square', as_qvm=True)
    service = RigettiQCSService(quantum_computer=qc, )

    # set the seed so we get a deterministic set of results.
    qvm = cast(QVM, qc.qam)
    qvm.random_seed = 0

    repetitions = 10
    param_resolvers = [r for r in cirq.study.to_resolvers(sweepable)]
    result = service.run(
        circuit=circuit,
        repetitions=repetitions,
        param_resolver=param_resolvers[1],
    )
    assert isinstance(result, cirq.study.Result)
    assert sweepable[1] == result.params

    assert 'm' in result.measurements
    assert (repetitions, 1) == result.measurements['m'].shape

    counter = result.histogram(key='m')
    assert 4 == counter[0]
    assert 6 == counter[1]
예제 #4
0
def test_rigetti_qcs_service_api_call():
    """test that `RigettiQCSService` will use a custom defined client when the
    user specifies one to make an API call."""
    class Response(httpcore.SyncByteStream):
        def __iter__(self) -> Iterator[bytes]:
            yield b"{\"quantumProcessors\": [{\"id\": \"Aspen-8\"}]}"  # pragma: nocover

    class Transport(httpcore.SyncHTTPTransport):
        def request(
            self,
            method: bytes,
            url: URL,
            headers: Headers = None,
            stream: httpcore.SyncByteStream = None,
            ext: dict = None,
        ):
            return 200, [('Content-Type', 'application/json')], Response(), {}

    client = httpx.Client(
        base_url="https://mock.api.qcs.rigetti.com",
        transport=Transport(),
    )

    response = RigettiQCSService.list_quantum_processors(client=client)
    assert 1 == len(response.quantum_processors)
    assert 'Aspen-8' == response.quantum_processors[0].id
예제 #5
0
def test_bell_circuit_through_service(bell_circuit: cirq.Circuit) -> None:
    """test that RigettiQCSService can run a basic bell circuit on the QVM and return an accurate
    ``cirq.study.Result``.
    """
    qc = get_qc('9q-square', as_qvm=True)
    service = RigettiQCSService(quantum_computer=qc, )

    # set the seed so we get a deterministic set of results.
    qvm = cast(QVM, qc.qam)
    qvm.random_seed = 0

    repetitions = 10
    result = service.run(circuit=bell_circuit, repetitions=repetitions)
    assert isinstance(result, cirq.study.Result)
    assert 0 == len(result.params.param_dict)

    assert 'm' in result.measurements
    assert (repetitions, 2) == result.measurements['m'].shape

    counter = result.histogram(key='m')
    assert 6 == counter.get(0)
    assert counter.get(1) is None
    assert counter.get(2) is None
    assert 4 == counter.get(3)