from genQC.platform.tokenizer.circuits_tokenizer import CircuitTokenizerPennylane circuits backend
PennyLane based quantum circuit backend.
Utils
instruction_name_to_pennylane_name
instruction_name_to_pennylane_name (name:str)
Maps instruction names to PennyLane names.
ParametrizedPennylaneCircuit
ParametrizedPennylaneCircuit (circuit:pennylane.workflow.qnode.QNode, params:torch.Tensor)
Backend
CircuitsPennylaneBackend
CircuitsPennylaneBackend ()
A backend for PennyLane.
Test
genqc <-> backend
tensor = torch.tensor([
[3, 0, -2, 0, 1],
[0, 0, 2, 0, 1],
[0, 3, -2, 3, 0],
], dtype=torch.int32)
params_tensor = torch.tensor([ # ... [max_params, time]
[1, 1, 1, 1, 0.9],
])
vocabulary = {"cp":1, "ccx":2, "rx":3}
tokenizer = CircuitTokenizer(vocabulary)
instructions = tokenizer.decode(tensor, params_tensor)
instructions.print()CircuitInstruction(name='rx', control_nodes=[], target_nodes=[0], params=[12.566370964050293])
CircuitInstruction(name='rx', control_nodes=[], target_nodes=[2], params=[12.566370964050293])
CircuitInstruction(name='ccx', control_nodes=[0, 2], target_nodes=[1], params=[12.566370964050293])
CircuitInstruction(name='rx', control_nodes=[], target_nodes=[2], params=[12.566370964050293])
CircuitInstruction(name='cp', control_nodes=[], target_nodes=[0, 1], params=[11.9380521774292])
backend = CircuitsPennylaneBackend()
qc = backend.genqc_to_backend(instructions, flip_qubit_order=False)
backend.draw(qc);