示例#1
0
def mock_qubit_device_with_original_statistics(monkeypatch):
    """ A mock device that mocks only basis methods and uses the original statistics related methods"""
    with monkeypatch.context() as m:
        m.setattr(QubitDevice, "__abstractmethods__", frozenset())
        m.setattr(QubitDevice, "_capabilities", mock_qubit_device_capabilities)
        m.setattr(QubitDevice, "operations", ["PauliY", "RX", "Rot"])
        m.setattr(QubitDevice, "observables", ["PauliZ"])
        m.setattr(QubitDevice, "short_name", "MockDevice")
        yield QubitDevice()
示例#2
0
 def test_defines_correct_capabilities(self):
     """Test that the device defines the right capabilities"""
     capabilities = {
         "model": "qubit",
         "supports_finite_shots": True,
         "supports_tensor_observables": True,
         "returns_probs": True,
     }
     assert capabilities == QubitDevice.capabilities()
示例#3
0
def mock_qubit_device_with_paulis_and_methods(monkeypatch):
    """A mock instance of the abstract QubitDevice class that supports Paulis in its capabilities"""
    with monkeypatch.context() as m:
        m.setattr(QubitDevice, "__abstractmethods__", frozenset())
        m.setattr(QubitDevice, "_capabilities", mock_qubit_device_capabilities)
        m.setattr(QubitDevice, "operations", mock_qubit_device_paulis)
        m.setattr(QubitDevice, "observables", mock_qubit_device_paulis)
        m.setattr(QubitDevice, "short_name", "MockDevice")
        m.setattr(QubitDevice, "expval", lambda self, x: 0)
        m.setattr(QubitDevice, "var", lambda self, x: 0)
        m.setattr(QubitDevice, "sample", lambda self, x: 0)
        m.setattr(QubitDevice, "apply", lambda self, x: None)
        yield QubitDevice()
示例#4
0
def mock_qubit_device(monkeypatch):
    """ A mock device that mocks most of the methods except for e.g. probability()"""
    with monkeypatch.context() as m:
        m.setattr(QubitDevice, "__abstractmethods__", frozenset())
        m.setattr(QubitDevice, "_capabilities", mock_qubit_device_capabilities)
        m.setattr(QubitDevice, "operations", ["PauliY", "RX", "Rot"])
        m.setattr(QubitDevice, "observables", ["PauliZ"])
        m.setattr(QubitDevice, "short_name", "MockDevice")
        m.setattr(QubitDevice, "expval", lambda self, x: 0)
        m.setattr(QubitDevice, "var", lambda self, x: 0)
        m.setattr(QubitDevice, "sample", lambda self, x: 0)
        m.setattr(QubitDevice, "apply", lambda self, x: None)
        yield QubitDevice()
示例#5
0
def mock_qubit_device_with_paulis_and_methods(monkeypatch):
    """A mock instance of the abstract QubitDevice class that supports Paulis in its capabilities"""
    with monkeypatch.context() as m:
        m.setattr(QubitDevice, '__abstractmethods__', frozenset())
        m.setattr(QubitDevice, '_capabilities', mock_qubit_device_capabilities)
        m.setattr(QubitDevice, 'operations', mock_qubit_device_paulis)
        m.setattr(QubitDevice, 'observables', mock_qubit_device_paulis)
        m.setattr(QubitDevice, 'short_name', 'MockDevice')
        m.setattr(QubitDevice, 'expval', lambda self, x: 0)
        m.setattr(QubitDevice, 'var', lambda self, x: 0)
        m.setattr(QubitDevice, 'sample', lambda self, x: 0)
        m.setattr(QubitDevice, 'apply', lambda self, x: None)
        yield QubitDevice()
示例#6
0
def mock_qubit_device(monkeypatch):
    """ A mock device that mocks most of the methods except for e.g. probability()"""
    with monkeypatch.context() as m:
        m.setattr(QubitDevice, '__abstractmethods__', frozenset())
        m.setattr(QubitDevice, '_capabilities', mock_qubit_device_capabilities)
        m.setattr(QubitDevice, 'operations', ["PauliY", "RX", "Rot"])
        m.setattr(QubitDevice, 'observables', ["PauliZ"])
        m.setattr(QubitDevice, 'short_name', 'MockDevice')
        m.setattr(QubitDevice, 'expval', lambda self, x: 0)
        m.setattr(QubitDevice, 'var', lambda self, x: 0)
        m.setattr(QubitDevice, 'sample', lambda self, x: 0)
        m.setattr(QubitDevice, 'apply', lambda self, x: None)
        yield QubitDevice()
示例#7
0
    def generate_samples(self):
        """Generates samples from the qpu.

        Note that the order of the samples returned here is not indicative of the order in which
        the experiments were done, but is instead controlled by a random shuffle (and hence
        set by numpy random seed).
        """
        number_of_states = 2**self.num_wires
        counts = np.rint(self.prob * self.shots,
                         out=np.zeros(number_of_states, dtype=int),
                         casting="unsafe")
        samples = np.repeat(np.arange(number_of_states), counts)
        np.random.shuffle(samples)
        return QubitDevice.states_to_binary(samples, self.num_wires)
示例#8
0
def mock_qubit_device_extract_stats(monkeypatch):
    """ A mock device that mocks the methods related to statistics (expval, var, sample, probability)"""
    with monkeypatch.context() as m:
        m.setattr(QubitDevice, "__abstractmethods__", frozenset())
        m.setattr(QubitDevice, "_capabilities", mock_qubit_device_capabilities)
        m.setattr(QubitDevice, "operations", ["PauliY", "RX", "Rot"])
        m.setattr(QubitDevice, "observables", ["PauliZ"])
        m.setattr(QubitDevice, "short_name", "MockDevice")
        m.setattr(QubitDevice, "expval", lambda self, x: 0)
        m.setattr(QubitDevice, "var", lambda self, x: 0)
        m.setattr(QubitDevice, "sample", lambda self, x: 0)
        m.setattr(
            QubitDevice, "probability", lambda self, wires=None: 0 if wires is None else wires
        )
        m.setattr(QubitDevice, "apply", lambda self, x: x)
        yield QubitDevice()
示例#9
0
def mock_qubit_device_extract_stats(monkeypatch):
    """ A mock device that mocks the methods related to statistics (expval, var, sample, probability)"""
    with monkeypatch.context() as m:
        m.setattr(QubitDevice, '__abstractmethods__', frozenset())
        m.setattr(QubitDevice, '_capabilities', mock_qubit_device_capabilities)
        m.setattr(QubitDevice, 'operations', ["PauliY", "RX", "Rot"])
        m.setattr(QubitDevice, 'observables', ["PauliZ"])
        m.setattr(QubitDevice, 'short_name', 'MockDevice')
        m.setattr(QubitDevice, 'expval', lambda self, x: 0)
        m.setattr(QubitDevice, 'var', lambda self, x: 0)
        m.setattr(QubitDevice, 'sample', lambda self, x: 0)
        m.setattr(QubitDevice,
                  'probability',
                  lambda self, wires=None: 0 if wires is None else wires)
        m.setattr(QubitDevice, 'apply', lambda self, x: x)
        yield QubitDevice()
示例#10
0
 def generate_samples(self):
     """Generates samples by random sampling with the probabilities returned by the simulator."""
     number_of_states = 2**self.num_wires
     samples = self.sample_basis_states(number_of_states, self.prob)
     return QubitDevice.states_to_binary(samples, self.num_wires)
示例#11
0
 def get_qubit_device(wires=1):
     return QubitDevice(wires=wires)