Exemplo n.º 1
0
def test_simulator_result_to_cirq_result():
    result = ionq.SimulatorResult(
        {0b00: 0.25, 0b01: 0.75}, num_qubits=2, measurement_dict={'x': [0, 1]}, repetitions=3
    )
    assert result.to_cirq_result(seed=2) == cirq.ResultDict(
        params=cirq.ParamResolver({}), measurements={'x': np.array([[0, 1], [0, 0], [0, 1]])}
    )
    assert result.to_cirq_result(seed=3) == cirq.ResultDict(
        params=cirq.ParamResolver({}), measurements={'x': np.array([[0, 1], [0, 1], [0, 1]])}
    )
    params = cirq.ParamResolver({'a': 0.1})
    assert result.to_cirq_result(seed=3, params=params) == cirq.ResultDict(
        params=params, measurements={'x': np.array([[0, 1], [0, 1], [0, 1]])}
    )
    assert result.to_cirq_result(seed=2, override_repetitions=2) == cirq.ResultDict(
        params=cirq.ParamResolver({}), measurements={'x': np.array([[0, 1], [0, 0]])}
    )

    result = ionq.SimulatorResult(
        {0b00: 0.25, 0b01: 0.75}, num_qubits=2, measurement_dict={'x': [0]}, repetitions=3
    )
    assert result.to_cirq_result(seed=2) == cirq.ResultDict(
        params=cirq.ParamResolver({}), measurements={'x': np.array([[0], [0], [0]])}
    )
    result = ionq.SimulatorResult(
        {0b00: 0.25, 0b01: 0.75}, num_qubits=2, measurement_dict={'x': [1]}, repetitions=3
    )
    assert result.to_cirq_result(seed=2) == cirq.ResultDict(
        params=cirq.ParamResolver({}), measurements={'x': np.array([[1], [0], [1]])}
    )
    # cirq.Result only compares pandas data frame, so possible to have supplied an list of
    # list instead of a numpy multidimensional array. Check this here.
    assert type(result.to_cirq_result().measurements['x']) == np.ndarray
Exemplo n.º 2
0
def test_simulator_result_measurement_multiple_key():
    result = ionq.SimulatorResult({
        0b00: 0.2,
        0b01: 0.8
    },
                                  num_qubits=2,
                                  measurement_dict={
                                      'a': [0],
                                      'b': [1]
                                  },
                                  repetitions=100)
    assert result.probabilities('a') == {0b0: 1.0}
    assert result.probabilities('b') == {0b0: 0.2, 0b1: 0.8}
    result = ionq.SimulatorResult({
        0b00: 0.2,
        0b01: 0.8
    },
                                  num_qubits=2,
                                  measurement_dict={
                                      'a': [1],
                                      'b': [0]
                                  },
                                  repetitions=100)
    assert result.probabilities('a') == {0b0: 0.2, 0b1: 0.8}
    assert result.probabilities('b') == {0b0: 1.0}
Exemplo n.º 3
0
def test_simulator_result_fields():
    result = ionq.SimulatorResult(
        {0: 0.4, 1: 0.6}, num_qubits=1, measurement_dict={'a': [0]}, repetitions=100
    )
    assert result.probabilities() == {0: 0.4, 1: 0.6}
    assert result.num_qubits() == 1
    assert result.measurement_dict() == {'a': [0]}
    assert result.repetitions() == 100
Exemplo n.º 4
0
def test_simulator_result_measurement_key():
    result = ionq.SimulatorResult(
        {0b00: 0.2, 0b01: 0.8}, num_qubits=2, measurement_dict={'a': [0]}, repetitions=100
    )
    assert result.probabilities() == {0b00: 0.2, 0b01: 0.8}
    result = ionq.SimulatorResult(
        {0b00: 0.2, 0b01: 0.8}, num_qubits=2, measurement_dict={'a': [0]}, repetitions=100
    )
    assert result.probabilities('a') == {0b0: 1.0}

    result = ionq.SimulatorResult(
        {0b00: 0.2, 0b01: 0.8}, num_qubits=2, measurement_dict={'a': [1]}, repetitions=100
    )
    assert result.probabilities('a') == {0b0: 0.2, 0b1: 0.8}
    result = ionq.SimulatorResult(
        {0b00: 0.2, 0b01: 0.8}, num_qubits=2, measurement_dict={'a': [0, 1]}, repetitions=100
    )
    assert result.probabilities('a') == {0b00: 0.2, 0b01: 0.8}
    result = ionq.SimulatorResult(
        {0b00: 0.2, 0b01: 0.8}, num_qubits=2, measurement_dict={'a': [1, 0]}, repetitions=100
    )
    assert result.probabilities('a') == {0b00: 0.2, 0b10: 0.8}
    result = ionq.SimulatorResult(
        {0b000: 0.2, 0b111: 0.8}, num_qubits=3, measurement_dict={'a': [2]}, repetitions=100
    )
    assert result.probabilities('a') == {0b0: 0.2, 0b1: 0.8}
    result = ionq.SimulatorResult(
        {0b000: 0.2, 0b100: 0.8}, num_qubits=3, measurement_dict={'a': [1, 2]}, repetitions=100
    )
    assert result.probabilities('a') == {0b00: 1.0}
Exemplo n.º 5
0
def test_simulator_result_str():
    result = ionq.SimulatorResult({
        0: 0.4,
        1: 0.6
    },
                                  num_qubits=2,
                                  measurement_dict={'a': [0]},
                                  repetitions=100)
    assert str(result) == '00: 0.4\n01: 0.6'
Exemplo n.º 6
0
def test_simulator_result_to_cirq_result_no_keys():
    result = ionq.SimulatorResult({
        0b00: 1,
        0b01: 2
    },
                                  num_qubits=2,
                                  measurement_dict={},
                                  repetitions=3)
    with pytest.raises(ValueError, match='cirq results'):
        _ = result.to_cirq_result()
Exemplo n.º 7
0
def test_simulator_result_to_cirq_result_multiple_keys():
    result = ionq.SimulatorResult(
        {0b000: 0.25, 0b011: 0.75},
        num_qubits=3,
        measurement_dict={'x': [1], 'y': [2, 0]},
        repetitions=3,
    )
    assert result.to_cirq_result(seed=2) == cirq.ResultDict(
        params=cirq.ParamResolver({}),
        measurements={'x': np.array([[1], [0], [1]]), 'y': np.array([[1, 0], [0, 0], [1, 0]])},
    )
Exemplo n.º 8
0
def test_simulator_result_bad_measurement_key():
    result = ionq.SimulatorResult({
        0b00: 0.2,
        0b01: 0.8
    },
                                  num_qubits=2,
                                  measurement_dict={
                                      'a': [0],
                                      'b': [1]
                                  },
                                  repetitions=100)
    with pytest.raises(ValueError, match='bad'):
        result.probabilities('bad')
Exemplo n.º 9
0
def test_job_results_simulator_endianness():
    job_dict = {
        'id': 'my_id',
        'status': 'completed',
        'qubits': '2',
        'target': 'simulator',
        'data': {
            'histogram': {
                '0': '0.6',
                '1': '0.4'
            }
        },
        'metadata': {
            'shots': '100'
        },
    }
    job = ionq.Job(None, job_dict)
    results = job.results()
    assert results == ionq.SimulatorResult({0: 0.6, 2: 0.4}, 2, {}, 100)
Exemplo n.º 10
0
def test_simulator_result_eq():
    equals_tester = cirq.testing.EqualsTester()
    equals_tester.add_equality_group(
        ionq.SimulatorResult(
            {0: 0.5, 1: 0.5}, num_qubits=1, measurement_dict={'a': [0]}, repetitions=100
        ),
        ionq.SimulatorResult(
            {0: 0.5, 1: 0.5}, num_qubits=1, measurement_dict={'a': [0]}, repetitions=100
        ),
    )
    equals_tester.add_equality_group(
        ionq.SimulatorResult(
            {0: 0.4, 1: 0.6}, num_qubits=1, measurement_dict={'a': [0]}, repetitions=100
        )
    )
    equals_tester.add_equality_group(
        ionq.SimulatorResult(
            {0: 0.5, 1: 0.5}, num_qubits=2, measurement_dict={'a': [0]}, repetitions=100
        )
    )
    equals_tester.add_equality_group(
        ionq.SimulatorResult(
            {0: 0.5, 1: 0.5}, num_qubits=1, measurement_dict={'b': [0]}, repetitions=100
        )
    )
    equals_tester.add_equality_group(
        ionq.SimulatorResult(
            {0: 0.5, 1: 0.5}, num_qubits=1, measurement_dict={'a': [1]}, repetitions=100
        )
    )
    equals_tester.add_equality_group(
        ionq.SimulatorResult(
            {0: 0.5, 1: 0.5}, num_qubits=1, measurement_dict={'a': [0, 1]}, repetitions=100
        )
    )
    equals_tester.add_equality_group(
        ionq.SimulatorResult(
            {0: 0.5, 1: 0.5}, num_qubits=1, measurement_dict={'a': [0, 1]}, repetitions=10
        )
    )