示例#1
0
    def test_supported_gates_consistent(self, op_and_sim):
        """Ensure that supported gates are consistent across backends."""
        op = op_and_sim[0]
        sim = op_and_sim[1]
        qubits = cirq.GridQubit.rect(1, 5)
        circuit_batch = []

        gate_ref = util.get_supported_gates()
        for gate in gate_ref:
            # Create a circuit with non zero entries on real
            # and imaginary values.
            c = cirq.Circuit()
            for qubit in qubits:
                c += cirq.Circuit(cirq.Y(qubit)**0.125)

            if gate_ref[gate] == 2:
                op_qubits = np.random.choice(qubits, size=2, replace=False)
                c += cirq.Circuit(gate(*op_qubits))
            elif gate_ref[gate] == 1:
                op_qubits = np.random.choice(qubits, size=1, replace=False)
                c += cirq.Circuit(gate(*op_qubits))
            else:
                raise ValueError(
                    "Unable to test supported gates across all ops."
                    "please update circuit_execution_ops_test.py")

            circuit_batch.append(c)

        op_states = op(util.convert_to_tensor(circuit_batch), [],
                       [[]] * len(circuit_batch)).to_list()
        cirq_states = batch_util.batch_calculate_state(
            circuit_batch, [cirq.ParamResolver({}) for _ in circuit_batch],
            sim)

        self.assertAllClose(cirq_states, op_states, atol=1e-5, rtol=1e-5)
示例#2
0
 def test_get_supported_channels(self):
     """Confirm one of every channel is returned."""
     mapping_1 = util.get_supported_channels()
     self.assertEqual(
         len(mapping_1.keys()),
         len(serializer.SERIALIZER.supported_gate_types()) -
         len(util.get_supported_gates()))
示例#3
0
def _items_to_tensorize():
    """Objects on which convert_to_tensor convert_from_tensor will be tested."""
    return [{
        'item': x
    } for x in (util.random_pauli_sums(BITS, 5, 5) + [
        cirq.PauliSum.from_pauli_strings([
            cirq.PauliString(),
            cirq.PauliString(cirq.Z(cirq.GridQubit(0, 0)))
        ])
    ] + [cirq.PauliString(), cirq.PauliString()] + [cirq.Circuit()] + [
        cirq.testing.random_circuit(BITS, 25, 0.9, util.get_supported_gates())
        for _ in range(5)
    ])]
示例#4
0
    def test_addcircuit_modify(self):
        """Test that a addcircuit layer correctly modifies input circuits."""
        bits = cirq.GridQubit.rect(1, 20)
        circuit_a = cirq.testing.random_circuit(bits, 10, 0.9,
                                                util.get_supported_gates())
        circuit_b = cirq.testing.random_circuit(bits, 10, 0.9,
                                                util.get_supported_gates())

        expected_append = util.convert_to_tensor([circuit_a + circuit_b])
        expected_prepend = util.convert_to_tensor([circuit_b + circuit_a])

        append_layer = elementary.AddCircuit()
        prepend_layer = elementary.AddCircuit()

        actual_append = util.convert_to_tensor(
            util.from_tensor(append_layer(circuit_a, append=circuit_b)))
        actual_prepend = util.convert_to_tensor(
            util.from_tensor(prepend_layer(circuit_a, prepend=circuit_b)))

        self.assertEqual(expected_append.numpy()[0], actual_append.numpy()[0])
        self.assertEqual(expected_prepend.numpy()[0],
                         actual_prepend.numpy()[0])