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)