示例#1
0
    def apply(self,
              operations: Sequence[Operation],
              rotations: Sequence[Operation] = None,
              **run_kwargs) -> Circuit:
        """Instantiate Braket Circuit object."""
        rotations = rotations or []
        circuit = Circuit()

        # Add operations to Braket Circuit object
        for operation in operations + rotations:
            params = [
                p.numpy() if isinstance(p, np.tensor) else p
                for p in operation.parameters
            ]
            gate = translate_operation(operation, params)
            dev_wires = self.map_wires(operation.wires).tolist()
            ins = Instruction(gate, dev_wires)
            circuit.add_instruction(ins)

        unused = set(range(
            self.num_wires)) - {int(qubit)
                                for qubit in circuit.qubits}

        # To ensure the results have the right number of qubits
        for qubit in sorted(unused):
            circuit.i(qubit)

        return circuit
def test_translate_operation_inverse(pl_cls, braket_cls, qubits, params, inv_params):
    """Tests that inverse gates are translated correctly"""
    pl_op = pl_cls(*params, wires=qubits).inv()
    braket_gate = braket_cls(*inv_params)
    assert translate_operation(pl_op) == braket_gate
    assert _braket_to_pl[
        braket_gate.to_ir(qubits).__class__.__name__.lower().replace("_", "")
    ] == pl_op.name.replace(".inv", "")
def test_translate_operation_named_inverse(pl_cls, braket_cls, qubit):
    """Tests that operations whose inverses are named Braket gates are inverted correctly"""
    pl_op = pl_cls(wires=[qubit]).inv()
    braket_gate = braket_cls()
    assert translate_operation(pl_op) == braket_gate
    assert (
        _braket_to_pl[braket_gate.to_ir([qubit]).__class__.__name__.lower().replace("_", "")]
        == pl_op.name
    )
def test_translate_operation_iswap_inverse():
    """Tests that the iSwap gate is inverted correctly"""
    assert translate_operation(qml.ISWAP(wires=[0, 1]).inv()) == gates.PSwap(3 * np.pi / 2)