You're reading the documentation of the v1.1. For the latest released version, please have a look at v1.2.
MyQLM converter
Minimal code
This section demonstrates the basic usage of the MyQLM converter with a simple example. We’ll create a single-qubit circuit that applies an X gate and convert it to a Perceval photonic processor.
Note that this notebook requires the installation of MyQLM (which can be easily done with pip install myqlm). This repository can also be installed with the command: pip install .[MyQLM-bridge] to automatically install MyQLM.
[1]:
# Import required libraries
import qat.lang.AQASM as qataqasm
import perceval as pcvl
from perceval_interop import MyQLMConverter
[2]:
# Create a MyQLM quantum program
qprog = qataqasm.Program()
# Allocate quantum bits
qbits = qprog.qalloc(1) # Allocate 1 qubit
# Apply quantum gate (X gate = NOT gate)
qprog.apply(qataqasm.X, qbits[0]) # Apply X gate to flip |0⟩ → |1⟩
# Convert program to MyQLM circuit
myqlm_circuit = qprog.to_circ()
myqlm_circuit.display()
[3]:
# Convert MyQLM circuit to Perceval processor
myqlm_converter = MyQLMConverter(backend_name="Naive")
converted_processor = myqlm_converter.convert(myqlm_circuit, use_postselection=True)
pcvl.pdisplay(converted_processor, recursive=True)
[3]:
Circuit to generate GHZ State
In this section, we show how circuits from myQLM can be converted into Perceval circuits. To do so, we take the example of a simple gate-based circuit producing GHZ states. We then show the translation to a linear optical circuit. We also show the equivalence between the two circuits (gate-based and perceval).
[4]:
from perceval.algorithm import Sampler
Conversion from MyQLM Circuit to Perceval
Analogous to QiskitConverter, employ a MyQLMConverter object to convert a MyQLM circuit to a Perceval processor with each qubit of the circuit represented by 2 modes and additional modes for ancillary photons to perform deterministically two-qubit gates. (Read in the qiskit converter notebook for a discussion on how ancillary modes are set).
Circuit to generate GHZ State in MyQLM
[5]:
# Create a myqlm program
qprog = qataqasm.Program()
# Allocate qbits to the Program
qbits = qprog.qalloc(3)
# Add gates
qprog.apply(qataqasm.H, qbits[0])
qprog.apply(qataqasm.CNOT, qbits[0], qbits[1])
qprog.apply(qataqasm.CNOT, qbits[0], qbits[2])
# Convert program to myqlm circuit
myqlm_circuit = qprog.to_circ()
myqlm_circuit.display()
Conversion of Myqlm circuit to Perceval
[6]:
myqlm_converter = MyQLMConverter(backend_name="Naive")
converted_processor = myqlm_converter.convert(myqlm_circuit, use_postselection=True)
pcvl.pdisplay(converted_processor, recursive=True)
[6]:
[7]:
# computing results with converted processor from myqlm
converted_processor.with_input(pcvl.LogicalState([0,0,0]))
sampler = Sampler(converted_processor)
output_distribution_myqlm_pcvl = sampler.probs()["results"]
pcvl.pdisplay(output_distribution_myqlm_pcvl, precision=1e-2, max_v = 4)
| state | probability |
|---|---|
| |0,1,0,1,0,1> | 1/2 |
| |1,0,1,0,1,0> | 1/2 |
Note: The result is exactly the same as previously obtained from converter from Qiskit and is also the expected result.
Few remarks
Only the following gates are supported:
1-Qubit gates
2-Qubits gates: CNOT, CSIGN, SWAP
3-Qubits gate: Toffoli