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
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}
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
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}
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'
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()
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]])}, )
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')
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)
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 ) )