Пример #1
0
    def test_simple_circuits(self):

        default_qubit = qml.device('default.qubit', wires=4)

        for dev in self.devices:
            gates = [
                qml.PauliX(wires=0),
                qml.PauliY(wires=1),
                qml.PauliZ(wires=2),
                qml.S(wires=3),
                qml.T(wires=0),
                qml.RX(2.3, wires=1),
                qml.RY(1.3, wires=2),
                qml.RZ(3.3, wires=3),
                qml.Hadamard(wires=0),
                qml.Rot(0.1, 0.2, 0.3, wires=1),
                qml.CRot(0.1, 0.2, 0.3, wires=[2, 3]),
                qml.Toffoli(wires=[0, 1, 2]),
                qml.SWAP(wires=[1, 2]),
                qml.CSWAP(wires=[1, 2, 3]),
                qml.U1(1.0, wires=0),
                qml.U2(1.0, 2.0, wires=2),
                qml.U3(1.0, 2.0, 3.0, wires=3),
                qml.CRX(0.1, wires=[1, 2]),
                qml.CRY(0.2, wires=[2, 3]),
                qml.CRZ(0.3, wires=[3, 1]),
                qml.CZ(wires=[2, 3]),
                qml.QubitUnitary(np.array([[1, 0], [0, 1]]), wires=2),
            ]

            layers = 3
            np.random.seed(1967)
            gates_per_layers = [
                np.random.permutation(gates).numpy() for _ in range(layers)
            ]

            for obs in {
                    qml.PauliX(wires=0),
                    qml.PauliY(wires=0),
                    qml.PauliZ(wires=0),
                    qml.Identity(wires=0),
                    qml.Hadamard(wires=0)
            }:
                if obs.name in dev.observables:

                    def circuit():
                        """4-qubit circuit with layers of randomly selected gates and random connections for
                        multi-qubit gates."""
                        qml.BasisState(np.array([1, 0, 0, 0]),
                                       wires=[0, 1, 2, 3])
                        for gates in gates_per_layers:
                            for gate in gates:
                                if gate.name in dev.operations:
                                    qml.apply(gate)
                        return qml.expval(obs)

                    qnode_default = qml.QNode(circuit, default_qubit)
                    qnode = qml.QNode(circuit, dev)

                    assert np.allclose(qnode(), qnode_default(), atol=1e-3)
Пример #2
0
 def circuit(a, b, c):
     qml.RX(a, wires=0)
     qml.RY(b, wires=1)
     qml.CNOT(wires=[1, 2])
     qml.RX(c, wires=2)
     qml.CNOT(wires=[0, 1])
     qml.RZ(c, wires=2)
     return qml.var(qml.PauliZ(0)), qml.expval(qml.PauliZ(1)), qml.var(qml.PauliZ(2))
Пример #3
0
    def test_projectq_ops(self):

        results = [-1.0, -1.0]
        for i, dev in enumerate(self.devices[1:3]):

            gates = [
                qml.PauliX(wires=0),
                qml.PauliY(wires=1),
                qml.PauliZ(wires=2),
                SqrtX(wires=0),
                SqrtSwap(wires=[3, 0]),
            ]

            layers = 3
            np.random.seed(1967)
            gates_per_layers = [
                np.random.permutation(gates).numpy() for _ in range(layers)
            ]

            def circuit():
                """4-qubit circuit with layers of randomly selected gates."""
                for gates in gates_per_layers:
                    for gate in gates:
                        if gate.name in dev.operations:
                            qml.apply(gate)
                return qml.expval(qml.PauliZ(0))

            qnode = qml.QNode(circuit, dev)
            assert np.allclose(qnode(), results[i], atol=1e-3)
Пример #4
0
 def circuit(x, y, z):
     qml.RX(x, wires=[0])
     qml.RZ(y, wires=[0])
     qml.CNOT(wires=[0, 1])
     qml.RY(y, wires=[0])
     qml.RX(z, wires=[0])
     return qml.expval(qml.PauliY(0)), qml.expval(qml.PauliZ(1))
Пример #5
0
        def circuit(x, c=None):
            qml.RX(x, wires=0)

            for i in range(c.val):
                qml.RX(x, wires=i)

            return qml.expval(qml.PauliZ(0))
Пример #6
0
 def circuit():
     """4-qubit circuit with layers of randomly selected gates."""
     for gates in gates_per_layers:
         for gate in gates:
             if gate.name in dev.operations:
                 qml.apply(gate)
     return qml.expval(qml.PauliZ(0))
Пример #7
0
 def classifier_circuit(in_data, x):
     qml.RX(in_data, wires=[0])
     qml.CNOT(wires=[0, 1])
     qml.RY(-1.6, wires=[0])
     qml.RY(in_data, wires=[1])
     qml.CNOT(wires=[1, 0])
     qml.RX(x, wires=[0])
     qml.CNOT(wires=[0, 1])
     return qml.expval(qml.PauliZ(0))
Пример #8
0
            def circuit(*x):
                """Test quantum function"""
                x = prep_par(x, op)
                op(*x, wires=wires)

                if issubclass(op, qml.operation.CV):
                    return qml.expval(qml.X(0))

                return qml.expval(qml.PauliZ(0))
Пример #9
0
 def circuit(x, y, z):
     qml.RX(x, wires=[0])
     qml.CNOT(wires=[0, 1])
     qml.RY(-1.6, wires=[0])
     qml.RY(y, wires=[1])
     qml.CNOT(wires=[1, 0])
     qml.RX(z, wires=[0])
     qml.CNOT(wires=[0, 1])
     return qml.expval(qml.PauliZ(0))
Пример #10
0
 def circuit(w):
     qml.RX(w[np.unravel_index(0, s)], wires=0)  # b[0]
     qml.RX(w[np.unravel_index(1, s)], wires=1)  # b[1]
     qml.RX(w[np.unravel_index(2, s)], wires=2)  # ...
     qml.RX(w[np.unravel_index(3, s)], wires=3)
     qml.RX(w[np.unravel_index(4, s)], wires=4)
     qml.RX(w[np.unravel_index(5, s)], wires=5)
     qml.RX(w[np.unravel_index(6, s)], wires=6)
     qml.RX(w[np.unravel_index(7, s)], wires=7)
     return tuple(qml.expval(qml.PauliZ(idx)) for idx in range(len(b)))
Пример #11
0
    def test_check_validity(self):
        """test that the check_validity method correctly
        determines what operations/observables are supported."""
        self.logTestName()

        dev = qml.device('default.qubit', wires=2)
        # overwrite the device supported operations and observables
        dev._operation_map = {
            'RX': 0,
            'PauliX': 0,
            'PauliY': 0,
            'PauliZ': 0,
            'Hadamard': 0
        }
        dev._observable_map = {'PauliZ': 0, 'Identity': 0}

        # test a valid queue
        queue = [
            qml.RX(1., wires=0, do_queue=False),
            qml.PauliY(wires=1, do_queue=False),
            qml.PauliZ(wires=2, do_queue=False),
        ]

        observables = [qml.expval(qml.PauliZ(0, do_queue=False))]

        dev.check_validity(queue, observables)

        # test an invalid operation
        queue = [qml.RY(1., wires=0, do_queue=False)]
        with self.assertRaisesRegex(qml.DeviceError, "Gate RY not supported"):
            dev.check_validity(queue, observables)

        # test an invalid observable with the same name
        # as a valid operation
        queue = [qml.PauliY(wires=0, do_queue=False)]
        observables = [qml.expval(qml.PauliY(0, do_queue=False))]
        with self.assertRaisesRegex(qml.DeviceError,
                                    "Observable PauliY not supported"):
            dev.check_validity(queue, observables)
Пример #12
0
    def test_sample_attribute_error(self):
        """Check that an error is raised if a required attribute
           is not present in a sampled observable"""
        self.logTestName()

        dev = qml.device('default.qubit', wires=2)

        queue = [qml.RX(0.543, wires=[0], do_queue=False)]

        # Make a sampling observable but delete its num_samples attribute
        obs = qml.sample(qml.PauliZ(0, do_queue=False), n=10)
        del obs.num_samples
        obs = [obs]

        with self.assertRaisesRegex(
                qml.DeviceError,
                "Number of samples not specified for observable"):
            dev.execute(queue, obs)
Пример #13
0
 def circuit(a, b):
     qml.RX(a[0], wires=0)
     qml.RX(a[1], wires=1)
     qml.RX(b[2, 1], wires=2)
     return qml.expval(qml.PauliZ(0)), qml.expval(
         qml.PauliZ(1)), qml.expval(qml.PauliZ(2))
Пример #14
0
 def qf(x):
     qml.RX(x, wires=[0])
     ev = qml.expval(qml.PauliZ(1))
     qml.RY(0.5, wires=[0])
     return ev
Пример #15
0
 def circuit():
     SomeOperation(wires=0)
     return qml.expval(qml.PauliZ(0))
Пример #16
0
 def qf(x):
     qml.RX(x, wires=[0])
     return qml.expval(qml.PauliZ(0)), 0.3
Пример #17
0
 def qf(x):
     qml.RX(x, wires=[0])
     ex = qml.expval(qml.PauliZ(1))
     return qml.expval(qml.PauliZ(0)), ex
Пример #18
0
 def circuit(x):
     qml.RX(x, wires=[0])
     return qml.sample(qml.PauliZ(0), 1), qml.sample(qml.PauliX(1), 1)
Пример #19
0
 def circuit_tfe(phi, theta):
     qml.RX(phi[0], wires=0)
     qml.RY(phi[1], wires=1)
     qml.CNOT(wires=[0, 1])
     qml.PhaseShift(theta[0], wires=0)
     return qml.expval(qml.PauliZ(0))
Пример #20
0
 def circuit(x, q=default_q):
     qml.RY(x, wires=0)
     return qml.expval(qml.PauliZ(q))
Пример #21
0
 def circuit(w, x=None):
     qml.RX(w, wires=[0])
     qml.RX(x, wires=[1])
     return qml.expval(qml.PauliZ(0)), qml.expval(qml.PauliZ(1))
Пример #22
0
 def ansatz(x, y, z):
     qml.QubitStateVector(np.array([1, 0, 1, 1])/np.sqrt(3), wires=[0, 1])
     qml.Rot(x, y, z, wires=0)
     qml.CNOT(wires=[0, 1])
     return qml.expval(qml.PauliZ(0)), qml.expval(qml.PauliY(1))
Пример #23
0
 def circuit(a):
     qml.RX(a, wires=0)
     return qml.var(qml.PauliZ(0))
Пример #24
0
 def circuit(reused_param, other_param):
     qml.RX(reused_param, wires=[0])
     qml.RZ(other_param, wires=[0])
     qml.RX(reused_param, wires=[0])
     return qml.expval(qml.PauliZ(0))
Пример #25
0
 def circuit(x):
     qml.RZ(x, wires=[0])
     return qml.expval(qml.PauliZ(0))
Пример #26
0
 def qf(x):
     qml.RX(x, wires=[0])
     qml.CNOT(wires=[0, 2])
     return qml.expval(qml.PauliZ(0))
Пример #27
0
 def circuit4(a, b, c):
     qml.RX(b, wires=0)
     qml.RX(c, wires=1)
     return qml.expval(qml.PauliZ(0)), qml.expval(qml.PauliZ(1))
Пример #28
0
 def circuit(x, y, input_state=np.array([0, 0])):
     qml.BasisState(input_state, wires=[0, 1])
     qml.RX(x, wires=[0])
     qml.RY(y, wires=[0])
     return qml.expval(qml.PauliZ(0))
Пример #29
0
 def qf(x):
     qml.RX(x, wires=[0])
     qml.Displacement(0.5, 0, wires=[0])
     return qml.expval(qml.PauliZ(0))
Пример #30
0
 def circuit(x,y,z):
     qml.Rot(x,y,z, wires=[0])
     return qml.expval(qml.PauliZ(0))