Пример #1
0
    def test_hadamard_expectation(self, backend_specs, monkeypatch):
        """Test that the expectation value of the Hadamard is computed
        correctly."""
        n_wires = 2

        theta = 0.432
        phi = 0.123

        dev = qml.device("orquestra.qulacs", wires=2)

        def circuit():
            qml.RY(theta, wires=[0])
            qml.RY(phi, wires=[1])
            qml.CNOT(wires=[0, 1])
            return qml.expval(qml.Hadamard(wires=0)), qml.expval(
                qml.Hadamard(wires=1))

        qnode = qml.QNode(circuit, dev)
        qnode._construct([], {})
        qasm_circuit = dev.serialize_circuit(qnode.circuit)
        ops, _ = dev.process_observables(qnode.circuit.observables)
        ops = json.dumps(ops)

        lst = []

        monkeypatch.setattr(expval, "save_list",
                            lambda val, name: lst.append(val))
        expval.run_circuit_and_get_expval(dev.backend_specs, qasm_circuit, ops)
        expected = np.array([
            np.sin(theta) * np.sin(phi) + np.cos(theta),
            np.cos(theta) * np.cos(phi) + np.sin(phi)
        ]) / np.sqrt(2)

        assert np.allclose(lst[0], expected, atol=analytic_tol)
    def test_run_circuit_and_get_expval_rot_cnot(self, backend_specs,
                                                 monkeypatch):
        """Tests that the correct result in obtained for a circuit that
        contains rotations and a CNOT."""
        lst = []

        theta = 0.432
        phi = 0.123

        circ_qasm = f'OPENQASM 2.0;\ninclude "qelib1.inc";\nqreg q[2];\ncreg c[2];\nrx({theta}) q[0];\nrx({phi}) q[1];\ncx q[0],q[1];'

        op = '["[Z0]", "[Z1]"]'

        # Instead of creating a json at the end of the step, just append it to
        # a local list
        monkeypatch.setattr(expval, "save_list",
                            lambda val, name: lst.append(val))

        expval.run_circuit_and_get_expval(backend_specs, circ_qasm, op)

        res = np.array(lst[0])
        assert np.allclose(res,
                           np.array(
                               [np.cos(theta),
                                np.cos(theta) * np.cos(phi)]),
                           atol=analytic_tol)
Пример #3
0
    def test_only_measure_circuit(self, backend_specs, op, monkeypatch):
        """Tests that the correct result in obtained for a circuit that only
        contains measurements."""
        lst = []

        simple_qasm = 'OPENQASM 2.0;\ninclude "qelib1.inc";\nqreg q[3];\ncreg c[3];\n'

        monkeypatch.setattr(expval, "save_list",
                            lambda val, name: lst.append(val[0]))

        expval.run_circuit_and_get_expval(backend_specs, simple_qasm, op)
        assert lst[0] == 1.0
    def test_only_measure_circuit(self, op, backend_specs, monkeypatch):
        """Tests that the correct result in obtained for a circuit that only
        contains measurements."""
        lst = []

        only_measure_qasm = 'OPENQASM 2.0;\ninclude "qelib1.inc";\nqreg q[3];\ncreg c[3];\n'

        # Instead of creating a json at the end of the step, just append it to
        # a local list
        monkeypatch.setattr(expval, "save_list",
                            lambda val, name: lst.append(val))

        expval.run_circuit_and_get_expval(backend_specs, only_measure_qasm, op)
        assert lst[0][0] == 1
Пример #5
0
    def test_run_circuit_and_get_expval_hadamard(self, backend_specs,
                                                 monkeypatch):
        """Tests that the correct result in obtained for a circuit that
        contains a Hadamard gate."""
        lst = []

        hadamard_qasm = 'OPENQASM 2.0;\ninclude "qelib1.inc";\nqreg q[2];\ncreg c[2];\nh q[0];\n'
        op = '["[Z0]"]'

        monkeypatch.setattr(expval, "save_list",
                            lambda val, name: lst.append(val))

        expval.run_circuit_and_get_expval(backend_specs, hadamard_qasm, op)
        assert math.isclose(lst[0][0], 0.0, abs_tol=tol)
Пример #6
0
    def test_run_circuit_and_get_expval_simple_ibmq(self, token, op,
                                                    monkeypatch):
        """Test running an empty circuit."""
        lst = []

        IBMQ.enable_account(token)
        backend_specs = '{"module_name": "qeqiskit.backend", "function_name": "QiskitBackend", "device_name": "ibmq_qasm_simulator", "n_samples": 8192}'

        simple_qasm = 'OPENQASM 2.0;\ninclude "qelib1.inc";\nqreg q[3];\ncreg c[3];\n'

        monkeypatch.setattr(expval, "save_list",
                            lambda val, name: lst.append(val))

        expval.run_circuit_and_get_expval(backend_specs, simple_qasm, op)
        assert math.isclose(lst[0][0], 1.0, abs_tol=tol)
    def test_hadamard_expectation_plugin_integration(self, backend_specs,
                                                     monkeypatch):
        """Test that the expectation value of the Hadamard is computed
        correctly when integrating the step function with the plugin."""
        n_wires = 2

        theta = 0.432
        phi = 0.123

        dev = qml.device("orquestra.qulacs", wires=2)

        def circuit():
            qml.RY(theta, wires=[0])
            qml.RY(phi, wires=[1])
            qml.CNOT(wires=[0, 1])
            return qml.expval(qml.Hadamard(wires=0)), qml.expval(
                qml.Hadamard(wires=1))

        with monkeypatch.context() as m:
            m.setattr(dev, "execute", lambda *args, **kwargs: np.array([None]))
            qnode = qml.QNode(circuit, dev)
            qnode()

        circuit = qnode.qtape

        qasm_circuit = dev.serialize_circuit(circuit)
        ops, _ = dev.process_observables(circuit.observables)
        ops = json.dumps(ops)

        lst = []

        # Instead of creating a json at the end of the step, just append it to
        # a local list
        monkeypatch.setattr(expval, "save_list",
                            lambda val, name: lst.append(val))
        expval.run_circuit_and_get_expval(dev.backend_specs, qasm_circuit, ops)
        expected = np.array([
            np.sin(theta) * np.sin(phi) + np.cos(theta),
            np.cos(theta) * np.cos(phi) + np.sin(phi)
        ]) / np.sqrt(2)

        assert np.allclose(lst[0], expected, atol=analytic_tol)